我对gradle行动命令感到困惑。 以下是我的任务:
task myTask6 {
description "Here's a task with a configuration block"
group "Some group"
doLast {
println "5"
}
println "2"
leftShift { println "4" }
doFirst {
println "3"
}
}
myTask6 << { println "1" }
在我看来,结果应该是: 1 2 3 4 五 但结果是: 2 3 五 1
发生什么事了?
可以为leftShift
分配一个关闭权限吗?因为myTask6.leftShift = {}
是正确的。
答案 0 :(得分:0)
println "2"
在配置阶段执行。
而且,Next是执行阶段doFirst。
doFirst{
println "3"
}
&lt;&lt; {{}只是doLast
别名
所以println "5"
是第一个。
答案 1 :(得分:0)
解释很简单。首先执行configuration phase行,以便打印 2 。然后,通过(doLast
,doFirst
,<<
)添加的所有操作都会按照添加的顺序执行。所以 3 5 1 将是输出。 doFirst
在doLast
,leftShift
到最后时,会在列表开头添加操作。
现在,问题是:
leftShift { println "4" }
问题在于Closure
和Task
都定义了leftShift
,即使将任务实例设置为委托,也使用了DELEGATE_FIRST
解析策略调用配置闭包(通过配置闭包我的意思是在 myTask6 文字之后传递的大闭包)将调用Closure
的{{1}}。要解决此问题,您需要明确定义需要调用的leftShift
:
leftShift
或
task myTask6 {
description "Here's a task with a configuration block"
group "Some group"
doLast {
println "5"
}
println "2"
it.leftShift { println "4" }
doFirst {
println "3"
}
}
myTask6 << { println "1" }