我們有一個可選的gradle任務docker
,它取決於任務war
,如果執行該任務,需要使用其中的額外文件生成的war文件。這個額外的文件可以被添加到processResources
任務中的資源(或直接在war
任務中)。但是,如果任務docker
未被請求且不會運行,則相應的代碼塊不能運行。gradle.processResources中的代碼塊是否有其他任務被請求
我們需要一個正確的條件在以下塊檢查,如果任務docker
在流水線:
processResources {
if (/* CONDITION HERE: task docker is requested */) {
from ("${projectDir}/docker") {
include "app.properties"
}
}
}
task docker(type: Dockerfile) {
dependsOn build
...
澄清:processResources
是war
任務的標準的依賴,後者是標準依賴於build
任務。 processResources
總是在build
上執行,有或沒有docker
任務來收集組裝戰爭的資源,並且在這種情況下可能不會完全禁用。可以將代碼移動到依賴於docker
的單獨任務,並在輸出目錄processResources
上運行,但在運行war
之前,然而,這樣的構造對於這樣一個簡單的事情將導致更少的清晰度。
感謝您的回答。您能否請您根據我的問題添加到您的提示中,並在必要時進行更新。如果我理解正確,保留任務並且僅使代碼塊有條件的最優雅的解決方案是使用通過TaskExecutionGraph初始化的標誌。會嘗試讓知道。 –
@Oleg這個標誌有一個問題,它只在執行階段可用,但是你的任務很像複製任務,你提供的邏輯是在配置階段執行的。我想,根據你在最新的問題中的說明,最好的解決方案是將它分成2個任務,並在圖形準備就緒後禁用其中的一個,就像在最後一個例子中完成的那樣。只要不要忘記在任務上方留下評論,即可能在其他地方禁用該評論。當然,如果你能夠將你的邏輯轉移到執行階段,那麼flag就是解決方案 – Stanislav