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

Hei*_*inz 5 copy task gradle

build.gradle

task hello (type: Copy) {
   doLast {
      println "print from within"
   }
   println "print from outside"
}
Run Code Online (Sandbox Code Playgroud)

运行时

gradle -q你好

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

D:\>gradle -q hello
print from outside
Run Code Online (Sandbox Code Playgroud)

没有doLast或doFirst:

task hello (type: Copy) {
    //doLast{ 
       println "print from within"
    //}
    println "print from outside"
}
Run Code Online (Sandbox Code Playgroud)

它工作正常:

D:\>gradle -q hello
print from within
print from outside
Run Code Online (Sandbox Code Playgroud)

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

Opa*_*pal 5

如果您在没有-q开关的情况下运行任务,您会注意到该任务已被标记为UP-TO-DATE- 这意味着没有执行任何操作(并且您通过 来添加操作doLast)。

这是为什么?在此特定示例中,您没有为任务配置输入和输出。Copy任务根据输入和输出解决它是最新的,并且由于没有配置 Gradle 假设不需要运行它。


Val*_*hah 5

我认为这对来到同一地点的人会有所帮助。尽管以上解释从概念上讲是合理的。答案中没有提到适当的解决方案。这是关于我如何通过执行来完成Copy任务的解决方案doLast

  task hello () {
        doLast{ 
           copy {
             println "print from within"
           }
        }
        println "print from outside"
    }
Run Code Online (Sandbox Code Playgroud)

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

$ gradle -q hello print from outside print from within

希望这是有用的。