Gradle 根项目:不必要的空 JAR 生成

Gradle Root Project: Unnecessary Empty JAR Generation

提问人:Mihai Mecarian 提问时间:10/20/2023 更新时间:10/20/2023 访问量:32

问:

我正在开发一个包含四个 Java 子项目的 Gradle 多项目构建。我最近决定将这些子项目的依赖声明集中在根项目中。这种方法在管理我的项目之间的依赖关系方面取得了成功。build.gradle.kts

但是,我遇到了一个烦人的问题。当我构建项目时,会在根项目目录中生成一个构建文件夹,并在其中创建一个空的 JAR 文件,其中仅包含一个清单文件。根项目没有源代码,只是一个用于管理子项目的目录。此外,即使没有代码,也会在生成文件夹中生成一个空的代码覆盖率报告文件夹。

我的问题是双重的:

  • 为什么 Gradle 会为根项目生成一个空的 JAR 和一个不包含源代码的构建文件夹?
  • 如何配置 Gradle 以将根项目视为非 Java 项目,作为裸项目?

根项目配置

settings.gradle.kts文件:

rootProject.name = "root
include("core")
include("app")
include("ui")

build.gradle.kts文件:

plugins {
    id("java")
    id("jacoco")
}

configure(subprojects) {
    repositories {
        mavenCentral()
    }

    plugins.apply("java")
    plugins.apply("jacoco")

    dependencies {
        implementation(platform("org.apache.logging.log4j:log4j-bom:2.20.0"))
        implementation("org.apache.logging.log4j:log4j-api")
        implementation("org.apache.logging.log4j:log4j-core")
        implementation("org.apache.logging.log4j:log4j-slf4j-impl")
        implementation("org.slf4j:slf4j-api:1.7.32")
        testImplementation(platform("org.junit:junit-bom:5.10.0"))
        testImplementation("org.junit.jupiter:junit-jupiter")
        testRuntimeOnly("org.junit.platform:junit-platform-launcher")
    }

    tasks.test {
        useJUnitPlatform()
    }

    tasks.jacocoTestReport {
        dependsOn(tasks.test)
    }

    tasks.jacocoTestCoverageVerification {
        dependsOn(tasks.jacocoTestReport)
    }
}

您对如何配置 Gradle 以适当地处理根项目的见解和建议将不胜感激。谢谢。

我尝试用于每个插件,但这是一个错误,它们是核心插件。apply false

plugins {
    id("java") apply false
    id("jacoco") apply false
}
Java Gradle 依赖 项项目

评论


答:

0赞 Cubic 10/20/2023 #1

问题是这样的:

plugins {
    id("java")
    id("jacoco")
}

由于这些是核心插件,因此当您想将它们应用于当前项目时才有用。如果根项目不打算生成 jar,只需删除这些行即可。

评论

0赞 Mihai Mecarian 10/20/2023
我已经尝试过了,但是删除插件会导致此错误:“未解析的引用:实现”。似乎实现需要 java 插件,因为它是由这个插件定义的。
0赞 Mihai Mecarian 10/20/2023
整个想法是在根项目中具有共同的依赖项。删除插件会破坏这个目的,我会回到为每个子项目添加相同的依赖项。