首页 > 解决方案 > 如何在gradle中的所有子项目之前先执行根项目

问题描述

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

由于当我尝试引用子项目中的属性时 gradle build 并行运行,这将失败。

期待回复提前谢谢。

标签: gradlebuild.gradle

解决方案


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

推荐阅读