我想在所有子项目之前先执行根项目,原因是我在根项目中有一组任务,这些任务通过附加到properties.gradle或local.properties文件(例如:VAR = 10)来生成属性,然后我想在所有子项目中使用它。
由于gradle构建在我尝试引用子项目中的属性时会并行运行,因此会失败。
期待回复。
答案 0 :(得分:0)
gradle.properties
文件在构建执行开始时被读取一次,不会为每个子项目重新加载,因此,如果您从根项目任务中更改此文件,则无法期望更新的属性可用于子项目任务。 (我认为从您的构建脚本中更改此gradle.properties
并不是一个好主意)
为什么不简单地使用project.setProperty(key, value)
(请参阅Project DSL)设置属性?
示例:
根项目构建:
task setProperties(){
doLast{
def var = computeVar()
project.setProperty('VAR', var )
// DO NOT DO THAT:
// new File('gradle.properties').append("\nVAR=" + var)
}
}
来自子项目:
task printProperties(){
dependsOn tasks.getByPath(':setProperties')
doLast{
println "Properties: "
println "VAR = $VAR"
}
}