警告:Gradle新手... :-)如何修改Gradle複製任務中的文件列表?
我正在將現有項目從Ant轉換爲Gradle。我的項目很大一部分是由生成的代碼組成的。這段代碼被生成到一個內部目錄中,並且完成一個本地構建以確保正確生成代碼。驗證本地測試版本後,將生成的代碼複製到一組WAR項目中進行最終部署。
因此,作爲構建的一部分,我有一個任務將文件從測試版本複製到WAR項目。在製作副本時,有幾個文件只有在目標WAR項目中不存在時才應該複製。要做到這一點,我寫了下面的搖籃副本任務:
task copyServer (type: org.gradle.api.tasks.Copy) {
group = 'ds_copy'
String serviceRootDir = "${DS_ROOT_DIR}/NDMS_DS_Generated_Services/server_src/${x_dsServiceDir}"
String serviceDestDir = "${DS_ROOT_DIR}/NDMS_DS_Client/srv_src/${x_dsServiceDir}"
FileTree setupFiles = fileTree ("$serviceRootDir") {
include "gen/**/*.java", "request/gen/**.java"
}
doFirst {
File appFile = new File (serviceDestDir, "${dsName}App.java")
if (appFile.exists() == false)
{
setupFiles = fileTree (dir: "$serviceRootDir", include: ["gen/**/*.java", "request/gen/**.java", "${dsName}App.java"])
}
println ("Copying service classes for ${dsName} from ${serviceRootDir}")
println ("Files to copy: ")
setupFiles.each { println (it) }
println (setupFiles)
}
from (setupFiles)
into (serviceDestDir)
doLast {
println ("Finished copying service classes for ${dsName}")
}
}
我的問題是,我似乎無法從doFirst塊,以使該文件的存在檢查更新文件樹在目的地。即使我看到setupFiles得到更新,當發生複製時,我添加的文件在doFirst塊中不會被複制。
有沒有辦法修改copyTask使用的fileTree?
謝謝。這讓我到了我需要的地方。我沒有考慮到我可以在配置時更改包含的事實。通過在include子句中添加一個if語句,我可以控制添加的內容,就像我之前在執行時試圖執行的那樣... – Steve
如果文件已經存在,不復制文件的用例是什麼? – Vampire
我正在複製文件,如果它不*目前在目的地目錄中(例如appFile.exists()== false) – Steve