有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我刚从maven换到gradle,因为我觉得这是个好主意,因为我无法解决maven的问题。嗯,gradle也没有解决我的问题(这就是你来这里的原因,lol),但它更快,我会继续使用它

以下是我得到的:

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

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

这就是我将要测试的较小项目集重命名为它们的角色的程度:

这是根项目的渐变配置:

// 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中运行项目时(仅当我打开根项目时有效,否则会丢失导入),输出错误/显示错误,甚至没有显示


共 (1) 个答案

  1. # 1 楼答案

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