Gradle动作指令

时间:2016-01-11 05:41:57

标签: groovy gradle

我对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 = {}是正确的。

2 个答案:

答案 0 :(得分:0)

println "2"在配置阶段执行。

而且,Next是执行阶段doFirst。

   doFirst{
       println "3"
   }

&lt;&lt; {{}只是doLast别名 所以println "5"是第一个。

答案 1 :(得分:0)

解释很简单。首先执行configuration phase行,以便打印 2 。然后,通过(doLastdoFirst<<)添加的所有操作都会按照添加的顺序执行。所以 3 5 1 将是输出。 doFirstdoLastleftShift到最后时,会在列表开头添加操作。

现在,问题是:

leftShift { println "4" }

问题在于ClosureTask都定义了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" }