Gradle doLast,复制任务中的doFirst行为

时间:2016-12-06 18:27:38

标签: gradle copy task

  

的build.gradle

task hello (type: Copy) {
   doLast {
      println "print from within"
   }
   println "print from outside"
}

运行时

  

gradle -q hello

doLast {} 关闭甚至没有触及。将 doLast 更改为 doFirst ,我得到相同的结果:

D:\>gradle -q hello
print from outside

没有doLast或doFirst:

task hello (type: Copy) {
    //doLast{ 
       println "print from within"
    //}
    println "print from outside"
}

它工作正常:

D:\>gradle -q hello
print from within
print from outside

这似乎只发生在Copy类型的任务中。你能帮忙澄清一下吗?我正在使用gradle 2.4。

2 个答案:

答案 0 :(得分:3)

如果您在没有-q切换的情况下运行任务,您会发现任务已标记为UP-TO-DATE - 这意味着没有操作(并且您通过doLast添加了操作执行。

为什么?在此特定示例中,您没有为任务配置任何输入和输出。 Copy任务根据输入和输出确定它是最新的,因为没有配置gradle假定不需要运行它。

答案 1 :(得分:3)

我认为在同一个问题上来到这个地方的人会很有帮助。虽然上述解释在概念上是有意义的。答案中没有提到适当的解决方案。以下是我如何使用Copy执行doLast任务的解决方案。

  task hello () {
        doLast{ 
           copy {
             println "print from within"
           }
        }
        println "print from outside"
    }

这将提供复制任务和doLast的执行。

$ gradle -q hello print from outside print from within

希望这很有用。