构建gradle中具有两个或多个根的多模块项目

问题描述 投票:0回答:1

我只是从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构建,但是我得到的只是一组无用的jar ...该组件未运行,根文件只是一个空清单,当我在IntelliJ中运行项目时(仅当我打开了根项目,否则缺少导入)输出很奇怪/显示错误或什至没有显示。

java gradle multi-module
1个回答
0
投票

感谢@Slaw!我正在使用的结构可以通过composite build使用。无论如何,还需要gradle shadow来构建具有依赖项的工作jar。要构建它,我必须按照其网页上的说明进行配置,然后运行gradle clean shadowJar

© www.soinside.com 2019 - 2024. All rights reserved.