Gradle 多模块 groovy 'Project' 对象未在帮助文件中求值
Gradle Multi-Module groovy 'Project' object not getting evaluated in helper files
我有一个 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
。为什么?以及如何将我的设置提供给辅助文件?
有一个工作示例here on 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
(使用适当的 类)。
我有一个 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
。为什么?以及如何将我的设置提供给辅助文件?
有一个工作示例here on 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
(使用适当的 类)。