如果有人知道我在做什麼錯在這裏,我會很感激。第一次從臨時文件夾中複製文件的Gradle複製任務
我有一個運行這樣的任務的構建文件。
任務1(unpackWar):解壓縮war文件到臨時文件夾
任務2(copyWarFilesToWebContent):將文件複製到WebContent文件夾一些排除
任務3(copyRequiredJarFilesToWebContent):解壓幾個罐子從溫度/ WEB-INF/lib目錄到TempJarDir文件
任務4(explodeProductJars):複製文件,我們從TempJarDir要WebContent文件夾
有運行每個T的一個準備工作這些任務使用dependsOn,並且我已經將mustRunAfter命令添加到每個任務,以便按順序執行。還爲每個任務設置了ToDateWhen = false。
什麼似乎發生的是,任務1運行良好,解壓縮戰爭。任務2然後使用Temp中的文件並正確添加所需的文件到WebContent。
任務3和任務4總是回到最新狀態,因爲在指定的目錄中似乎沒有要使用的文件。
如果我在Temp文件夾存在時重新運行準備,任務3和4運行正常。
我不確定這是由於fileTree的工作原理或者我做錯了什麼。大約一週前我已經選擇了Gradle,並且仍然在努力解決它。
感謝您的幫助。
任務是這樣的:
task prepare(dependsOn: ['unpackWar', 'copyWarFilesToWebContent', 'copyRequiredJarFilesToWebContent'])
prepare.outputs.upToDateWhen {false}
task unpackWar(type: Copy) {
description = 'unzips the war'
outputs.upToDateWhen { false }
def warFile = file(warFileLocation)
from zipTree(warFile)
into "Temp"
}
task copyWarFilesToWebContent(type: Copy) {
mustRunAfter unpackWar
description = 'Moves files from Temp to WebContent Folder'
outputs.upToDateWhen { false }
from ('Temp') {
exclude "**/*.class"
}
into 'WebContent'
}
task explodeProductJars(type: Copy) {
outputs.upToDateWhen { false }
FileTree tree = fileTree(dir: 'Temp/WEB-INF/lib', includes: ['application*-SNAPSHOT-resources.jar', 'services*-SNAPSHOT-resources.jar'])
tree.each {File file ->
from zipTree(file)
into "TempJarDir"
}
}
task copyRequiredJarFilesToWebContent(type: Copy, dependsOn: explodeProductJars) {
mustRunAfter copyWarFilesToWebContent
outputs.upToDateWhen { false }
from ("TempJarDir/META-INF/resources") {
include '**/*.xml'
}
into "WebContent/WEB-INF"
}
我感覺它的東西與文件樹做的,但不知道究竟什麼發生。
你有沒有考慮過使用'--debug'或'--info'來運行gradle任務來看看有什麼關係?也許在你的問題中包含日誌? – frhd
我用--debug --info和--stacktrace運行。這些信息有點神祕,因爲我記得它說沒有任何文件可以處理或者達到某種程度。戴維斯的回答如下,澄清了爲什麼它沒有看到文件。我相信它是因爲當我運行任務時,配置階段同時處理每個任務,所以Temp文件夾不存在,這意味着任務被標記爲最新。打開糾正這個雖然 – Predz