我有一个多项目Gradle构建,其中子项目被分配独立于根项目的版本号。我想将这个版本号注入每个子项目的几个资源文件中。通常情况下,我会通过在根构建中为每个子项目配置processResources任务来完成此任务。然而,问题在于,在加载子项目的构建文件之前,Gradle似乎正在执行processResources任务,并且正在注入“未指定”作为版本。在配置子项目后执行Gradle任务
目前,我的项目是这样的:
/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"
我看着在根的build.gradle
的开头添加evaluationDependsOnChildren(),但会导致一个错误,因为customPlugin { ... }
前childA/build.gradle
运行。我尝试过使用dependsOn,mustRunAfter和其他技术,但没有一个看起来有理想的效果。 (也许我不完全了解生命周期,但是似乎在子项目之前配置并执行了根项目,不应配置root,然后配置子项目,然后执行?)
我该如何获得将每个子项目的版本注入适当的资源文件中,而不需要大量的复制/粘贴或样板文件?
你有没有想过这个?你可以做的一件事就是调用project.subprojects {sub - > sub.evaluate() //在子项目被评估后把代码放在这里}但是我试图在不改变评估逻辑的情况下做到这一点,所以如果你想出另一个解决方案我很乐意听到它 – BoredAndroidDeveloper