如何在配置步骤中将Gradle属性设置为不同的值?

时间:2015-10-13 17:02:17

标签: gradle build.gradle

This Android example build file包含代码段

    buildTypes {
        release {
            minifyEnabled true
        }

但是由于Gradle总是在构建脚本中执行所有configure语句,所以即使对于调试构建,这也不会将minifyEnabled设置为true吗?

希望 Gradle会让我在一个任务中将变量设置为true而在另一个任务中设置为false并以不同方式配置,但我能够做到的唯一方法是等待taskGraph .whenReady。这就是它通常的工作方式:

def myBool = false

task runs {
    myBool = true
}

task doesNotRun {
    myBool = false
}

task whoWins(dependsOn: runs) {
    doLast { println "myBool is ${myBool}" }
}

gradle whoWins
:runs
:whoWins
myBool is false

1 个答案:

答案 0 :(得分:1)

配置步骤是帮助Gradle构建任务执行图(实际运行的内容),这就是执行所有配置代码的原因。您所描述的内容听起来像循环任务依赖,其中任务依赖于由任务设置的变量,而该任务又取决于第一个任务。

Task A -> depends on Task B -> depends on variable from Task A

您可能正在寻找的是基于执行图配置任务的能力。请参阅Gradle用户指南,第6.13节Configure by DAG。使用它可以打破你的循环依赖。

Task A -> depends on Task B -> depends on gradle.taskGraph.whenReady

或者您可以创建一个新任务,即任务C,它根据任务图处理变量的设置。

def myBool = false

task runs {}

task doesNotRun {}

task whoWins(dependsOn: runs) {
    doLast { println "myBool is ${myBool}" }
}

task taskC << {
    if (gradle.taskGraph.hasTask(runs)) {
        myBool = true
    } else if (gradle.taskGraph.hasTask(doesNotRun)) {
        myBool = false
    }
}
runs.dependsOn(taskC)
doesNotRun.dependsOn(taskC)

结果:

$ gradle whois
:taskC
:runs
:whoWins
myBool is true