我有一個簡單的復制任務,它成功地復制了檔案,但沒有執行為該任務配置的 doFirst/doLast 項。
這是代碼(build.gradle):
task x(type: Copy) {
copy {
from(projectDir) {
include 'build.gradle'
}
into(buildDir)
}
println "Configuring."
doFirst {
println "Inside doFirst."
}
doLast {
println "Inside doLast."
}
}
很簡單:單個任務“x”將 build.gradle 腳本本身(專案檔案夾中的唯一檔案)復制到專案的構建檔案夾中。
這里是執行,首先確保沒有之前的輸出,并顯示執行后有輸出:
c:\jdev\newpaas\gradlebug>rd /s /q build & gradle x & dir build
The system cannot find the file specified.
> Configure project :
Configuring.
BUILD SUCCESSFUL in 1s
Volume in drive C is Windows
Volume Serial Number is 22A1-4AC1
Directory of c:\jdev\newpaas\gradlebug\build
01/05/2022 07:44 PM <DIR> .
01/05/2022 07:44 PM <DIR> ..
01/05/2022 07:44 PM 277 build.gradle
1 File(s) 277 bytes
2 Dir(s) 31,110,651,904 bytes free
首先,構建檔案夾不存在 - 因此無法洗掉。
Gradle 在配置階段顯示訊息。但是沒有顯示“dofirst”和“doLast”訊息。
執行后,構建檔案夾確實存在,并且正確填充了構建腳本的副本,這表明“x”任務確實執行了。但是 doFirst 和 doLast 中的訊息沒有列印出來。
StackOverflow 和其他地方也有類似的問題,但我看到的示例存在缺陷,因為這些問題中顯示的代碼沒有顯示輸入或輸出——只有 doFirst 和 doLast——所以答案是任務已經完成是最新的,這就是它沒有執行的原因;或者任務的整個主體都以 '<<' 開頭,因此是一個帶有 doLast 塊的空任務。 這是已配置的復制任務的示例,**正在 ** 明顯執行,只是不運行其 doFirst 和 doLast 閉包。
我在 Windows 10 上運行 Gradle 7.3。
我的需求不是列印訊息,但我發現專案插件的任務后配置沒有在復制任務中執行,看來歸結為這個問題。我嘗試使用 'into('') (檔案路徑,而不是包含包含的檔案夾路徑),并在任務定義中添加了 output.upToDateWhen { false } 條目。
uj5u.com熱心網友回復:
您不必在自定義任務中再次呼叫 copy。試試下面
task x(type: Copy) {
from(projectDir) {
include 'build.gradle'
}
into(buildDir)
println "Configuring " projectDir
doFirst {
println "Inside doFirst."
}
doLast {
println "Inside doLast."
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405772.html
標籤:
上一篇:升級顫振后Gradle無法構建
