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