Gradle 多模块时髦的"项目"对象未在帮助程序中进行评估



我有一个Java项目的多模块设置,结构如下。

mainApp
|--> core-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|       
|--> lib-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> lib-another-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> settings.gradle
|--> build.gradle

在我的settings.gradle中,我已经指定了。

rootProject.name = 'mainApp'
include 'core-module'
include 'lib-module'
include 'lib-another-module'

在我的mainApp/build.gradle文件中,我已经将一个助手编写为helper-tasks.gradle,并将该文件作为导入到我的$rootDir/build.gradle文件中

apply from: "$rootDir/helpers/helper-tasks.gradle"

task('bundleJar', type: Jar)subprojects { subproject -> }闭包的一部分,我只是调用./gradlew bundleJar。这里的期望是它应该遍历每个子项目,并为我的最终捆绑包收集类

helper-tasks.gradle文件中,我写了一个gradle tasks,如下

task('bundleJar', type: Jar) {
manifest {
attributes 'Manifest-Version': "1.0"
attributes 'Built-By': USER_NAME
attributes 'Created-By': "Java Version: " + JAVA_VERSION
attributes 'Implementation-Version': BUNDLE_VERSION + " Build " + GIT_COMMIT_HASH
attributes 'Build-Timestamp': BUILD_TIME
}
baseName('lib-module')
from project('lib-module').sourceSets.main.output.classesDirs
}

这里project('lib-module').sourceSets.main.output.classesDirs没有拾取子模块项目$rootDir/lib-module/build/classes/java/main的相对路径,但仍然参考"$rootDir/build/classes/java/main。为什么?以及如何将我的设置提供给助手文件?

GitHub上有一个工作示例。

考虑根上的build.gradle

subprojects {
apply plugin: 'java-library'
apply from: "${rootProject.projectDir}/helpers/helper-tasks.gradle"
}

helpers/helper-tasks.gradle:

task('bundleJar', type: Jar) {
manifest {
attributes 'Manifest-Version': "1.0"
attributes 'Built-By': USER_NAME
attributes 'Created-By': "Java Version: " + JAVA_VERSION
attributes 'Implementation-Version': BUNDLE_VERSION + " Build " + GIT_COMMIT_HASH
attributes 'Build-Timestamp': BUILD_TIME
}
baseName("${project.name}") 
from project.sourceSets.main.output.classesDirs
}

请注意,文件的名称现在与项目名称匹配。在该示例中,gradle lib-module:bundleJar将生成具有适当类的./lib-module/build/libs/lib-module.jar

类似地,gradle lib-another-module:bundleJar将生成./lib-another-module/build/libs/lib-another-module.jar(具有适当的类(。

最新更新