说,我们在build.gradle中设置了以下属性:
ext.PING = "PONG"
现在我们创建任务:
task ping(type: Exec) {
commandLine 'echo', project.hasProperty('PING')
}
task pong() {
doLast {
println project.hasProperty('PING')
}
}
如果将gradle pong
运行,我们会看到true
打印出来,如果我们运行gradle ping
,我们就会赢。
问题是:在我们组建commandLine命令的那一刻,我们如何解决这些问题呢?问题是在doLast
或doFirst
中我们会看到已评估的属性,但这没有帮助 - 应该早先形成commandLine。
答案 0 :(得分:1)
由于命令行参数的形成发生在配置阶段,您必须检查ext.PING = "PONG"
是否在ping
任务之前。例如,我用简单的构建脚本测试了它,如:
ext.PING = "PONG"
task ping(type: Exec) {
commandLine 'echo', project.hasProperty('PING')
}
回声的结果是真的,但是对于:
task ping(type: Exec) {
commandLine 'echo', project.hasProperty('PING')
}
ext.PING = "PONG"
结果是错误的。
您必须检查,是否在ping任务配置之前设置了此属性。对于doFirst
和doLast
,它们在执行阶段执行,这意味着所有配置都已完成且属性存在。