2016-12-06 15 views
2

搖籃doLast,在副本任務doFirst行爲

的build.gradle運行時

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

gradle這個-q你好

doLast {}封閉甚至沒有觸及。改變doLastdoFirst,我得到了相同的結果:

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 

這似乎只發生與複製類型的任務。你能幫忙澄清一下嗎?我使用gradle 2.4。

回答

2

如果不-q開關運行的任務,你會發現任務已標記爲UP-TO-DATE - 這意味着通過doLast被執行任何操作(和你添加動作

這是爲什麼在?這個特殊的例子,你沒有爲任務配置任何輸入和輸出Copy任務根據輸入和輸出解決了最新的問題,因爲沒有配置gradle,假設沒有必要運行它。

+0

部分解釋了我實際上已經嘗試了另一個用例:在** doLast {} **閉包中將**和**添加到**中。源文件已經改變了內容,任務的目的基本上是更新目的地。我們怎樣才能做到這一點?看起來doLast {}不會在類型複製的任務中被觸及,無論如何。 – Heinz

+0

由於'doLast'將在*執行時運行*在* configuration *階段中使用'into'和'from'時間,因此在'doLast'中同時放入'from'和'from'是沒有意義的'doLast'配置任何東西實在太遲了。在任務內使用'from'和'into',它將按預期工作。這似乎也需要閱讀有關gradle基礎知識。 [這裏](https://docs.gradle.org/current/userguide/build_lifecycle.html)的好起點 – Opal

+0

我原來的帖子是專門提出一個關於「複製」類型任務的問題。我仍然感到困惑。這是一個** build.gradle **文件:'task mycopy(type:Copy){from'c:\ temp \ me.txt'into'd:/'}
task hello(){doLast {println'Hello ,我'}}'。當您運行** gradle build.gradle hello **時,** mycopy {} **中的代碼將不會運行,儘管它應該在配置階段運行。我做錯了什麼? – Heinz