提问人:Mihai Mecarian 提问时间:10/20/2023 更新时间:10/20/2023 访问量:32
Gradle 根项目:不必要的空 JAR 生成
Gradle Root Project: Unnecessary Empty JAR Generation
问:
我正在开发一个包含四个 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
}
答:
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
整个想法是在根项目中具有共同的依赖项。删除插件会破坏这个目的,我会回到为每个子项目添加相同的依赖项。
评论