【发布时间】:2016-08-19 11:59:48
【问题描述】:
我有一个多项目 Gradle 构建,其中为子项目分配了独立于根项目的版本号。我想将此版本号注入到每个子项目中的几个资源文件中。通常,我会通过为根构建中的每个子项目配置 processResources 任务来做到这一点。但是,问题在于 Gradle 似乎在加载子项目的构建文件之前正在执行 processResources 任务,并且正在注入“未指定”作为版本。
目前,我的项目是这样的:
/settings.gradle
include 'childA' // ... and many others
/build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'com.example.exampleplugin'
}
subprojects {
// This has to be configured before processResources
customPlugin {
baseDir = "../common"
}
processResources {
// PROBLEM: version is "unspecified" here
inputs.property "version", project.version
// Inject the version:
from(sourceSets.main.resources.srcDirs) {
include 'res1.txt', 'res2.txt', 'res3.txt'
expand 'version':project.version
}
// ...
}
}
/childA/build.gradle
version = "0.5.424"
我考虑在 root 的 build.gradle 的开头添加 evaluationDependsOnChildren(),但这会导致错误,因为 childA/build.gradle 在 customPlugin { ... } 之前运行。我尝试过使用dependsOn、mustRunAfter 和其他技术,但似乎都没有达到预期的效果。 (可能我对生命周期不是很了解,但是好像root项目是在子项目之前配置和执行的,不应该是先配置root,再配置子项目,再执行吗?)
如何在没有大量复制/粘贴或样板的情况下将每个子项目的版本注入到适当的资源文件中?
【问题讨论】:
-
你有没有想过这个问题?您可以做的一件事是调用 project.subprojects { sub -> sub.evaluate() //在评估子项目后将代码放在这里} 但是我正在尝试在不更改评估逻辑的情况下执行此操作,所以如果您想出了另一个解决方案我很想听
标签: gradle