2017-01-04 95 views
0

我的搖籃構建有兩個任務:搖籃:任務的配置依賴於另一個任務的執行

  • findRevision(類型:SvnInfo)
  • buildWAR(類型:MavenExec,dependsOn:findRevision)

這兩個任務都是基於配置的,但buildWAR任務依賴於僅在findRevision任務的執行階段中定義的項目屬性。

這打破了這個過程,因爲Gradle在嘗試配置buildWAR任務時找不到所述屬性。

是否有任何方法來延遲綁定或配置,直到另一個任務已執行?

在這種特定情況下,我可以使用mavenexec方法而不是MavenExec任務類型,但是在類似的情況下應該做什麼,哪裏不存在替代方法?

+0

也許你可以將'findRevision'改爲'writeRevisionPropertyFile'。然後'buildWAR'可以使用屬性文件作爲輸入 –

回答

0

根據您想更改的配置選項,您可以在任務的執行階段使用buildWAR.doFirst { }更改它。但通常這是一個非常糟糕的主意。如果你e。 G。改變影響UP-TO-DATE檢查結果的事情,例如輸入文件,任務可能會執行,儘管這不是必要的,甚至更糟糕的是不要執行這些任務。當然,你可以通過outputs.upToDateWhen { false }來完成任務,以克服這個問題,但也可能有其他問題,並且這種方式可以禁用Gradle最大優勢之一。

這是一個更好的主意,重新設計你的版本,這是沒有必要的。例如,已經在配置時間確定修訂。取決於任務是否需要很長時間,這可能是一個可行的解決方案。另外,根據您想要對修訂進行的操作,您可能會考慮@LanceJava的建議,並使您的findRevision任務生成一個包含修訂的文件,然後將其打包到WAR中並在運行時使用。

+0

謝謝,我沒有意識到我可以改變doFirst中的屬性。考慮到你提出的問題,我會小心使用它,但在我的情況下,我認爲這是必要的。 – Zecrates