说,你有以下任务:
task commandA() {
doLast {
project.ext.ping = 'PING'
}
}
这将有效:
task commandB() {
dependsOn commandA
doLast {
println ping
}
}
这将失败:
task commandC(type: Exec) {
dependsOn commandA
commandLine "echo", ping
}
出现Could not find property 'ping' on task 'commandC'.
错误消息。
那么,如何为exec类型的任务声明依赖关系并在该依赖关系中设置一些变量呢?
答案 0 :(得分:0)
只是不要在doLast
块中初始化变量,因为它在执行阶段被初始化,但是commandLine "echo", ping
正试图在构建的配置阶段获取它。
所以,你需要这样的东西:
task commandA() {
project.ext.ping = 'PING'
}
甚至没有任务,如下:
project.ext.ping = 'PING'
因为总是执行任何任务的配置,即使任务的操作不会被执行。
另一个解决方案是使用exec-action,而不是exec-task,如下所示:
task commandA() {
doLast {
project.ext.ping = 'PING'
}
}
task commandC {
dependsOn commandA
doLast {
exec {
commandLine ping, "192.168.100.1"
}
}
}
在这种情况下,exec-closure将在执行阶段完成,因为ping变量已经可用。
您可以在官方Gradle user guide
中了解构建生命周期