如何在gradle中的所有子项目之前先执行根项目

时间:2019-01-11 13:40:42

标签: gradle build.gradle

我想在所有子项目之前先执行根项目,原因是我在根项目中有一组任务,这些任务通过附加到properties.gradle或local.properties文件(例如:VAR = 10)来生成属性,然后我想在所有子项目中使用它。

由于gradle构建在我尝试引用子项目中的属性时会并行运行,因此会失败。

期待回复。

1 个答案:

答案 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"
    }
}