我有一個多項目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