【问题标题】:Build multi-module project with two or more roots in gradle在 gradle 中构建具有两个或多个根的多模块项目
【发布时间】:2019-09-29 15:27:07
【问题描述】:

我刚刚从 maven 切换到 gradle,因为我认为这是一个好主意,因为我无法用 maven 解决我的问题。好吧,gradle 也没有解决我的问题(这就是你在这里的原因,哈哈)但它更快,我会继续使用它。

这是我得到的:

project/
├── components/
│   ├── Software Component A
│   └── Software Component B
└── modules/
    ├── Module A
    ├── Module B
    ├── Module C
    └── Module D

软件组件包括对整个项目通用的模块。出于测试原因,我希望能够使用 IntelliJ 运行该软件,并且我想为软件组件构建两个单独的 jar。

这就是我将一小部分项目重命名为他们的角色:

这是根项目的 gradle 配置:

// build.gradle
plugins {
    id 'java'
    id 'io.freefair.lombok' version '4.1.1'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'io.freefair.lombok'

    sourceCompatibility = '1.8'
    group = 'io.cloudsystem'
    version = '2.0.0'
    compileJava.options.encoding = 'UTF-8'
    compileTestJava.options.encoding = 'UTF-8'
    javadoc.options.encoding = 'UTF-8'

    repositories {
        mavenCentral()
    }

    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
    }
}

test {
    useJUnitPlatform()
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

// settings.gradle
rootProject.name = 'gradle_root_project'
include 'module_a', 'module_b', 'module_c', 'software_component_a'

这适用于软件组件(始终仅设置:rootProject.name = 'projectname'

// build.gradle
plugins {
    id 'application'
}

application {
    mainClassName = 'io.cloudsystem.Controller'
}

dependencies {
    implementation project(':ModuleLoader')
    implementation project(':TerminalModule')
    implementation project(':NetworkModule')
}

现在整个事情都是用gradle build 构建的,但我得到的只是一组无用的罐子......组件没有运行,根文件只是一个空清单,当我在 IntelliJ 中运行项目时(仅适用于当我打开根项目时,否则缺少导入)输出很奇怪/显示错误甚至不显示。

【问题讨论】:

  • 您是否正在尝试创建composite build
  • 我不这么认为,因为他将模块包含在正常的多项目结构中。但我还有一个问题:当你说你的组件不运行时,你是如何运行它们的?
  • @Slaw 听起来很像我需要的东西。我会尝试用你的建议解决它
  • @BjørnVester 好吧,我只想运行该组件。这些模块就像东西一样是库
  • 这实际上解决了我的问题!非常感谢。

标签: java gradle multi-module


【解决方案1】:

感谢@Slaw!我使用的结构可以使用composite build。无论如何,还需要gradle shadow 来构建一个具有依赖关系的工作 jar。为了构建它,我必须按照他们网页上的描述配置它并运行gradle clean shadowJar

【讨论】:

  • 以防万一,复合构建多项目构建是有区别的。后者有一个或多个子项目,但仍被视为单个构建;这类似于多模块 Maven 设置。而前者是两个或多个构建的组合;我不知道 Maven 中的等效机制,如果有的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2020-01-26
  • 2019-03-18
相关资源
最近更新 更多