2017-08-09 64 views
0

我有一個在Windows 10上成功運行的多項目Gradle構建腳本。它讀取並更新遠離項目託管目錄的Version.properties文件。 使用Gradle/groovy完成所有文件操作。在版本文件被讀取,增加和重寫之後,它被複制到build/classes目錄,在那裏它將被隨後的jar和shadowjar任務拾取。Gradle clean build - 在清潔完成之前開始構建

gradle build shadowjar ... etc. 

但是,如果我調用建立文件之前清潔任務是閱讀和適當增加,但該文件的副本靜靜地失敗:如果我的Gradle調用如下
一切都像宣傳的那樣。

使用的命令是:

gradle clean build shadowjar 

我懷疑是gradle這個不等待清潔任務開始之前構建的任務完成。文件被讀取並增加,但同時,多項目清理活動尚未完成。我嘗試過在依賴項塊,doFirst {}和doLast {}上進行嘗試,並在構建過程中進一步推送文件副本。我的主要要求是在執行jar或shadowjar任務之前,先有Version.properties文件。我懷疑試圖寫入gradle的構建/目錄,因爲在gradle執行其活動時,可能無法將任何內容放入構建目錄中。有什麼方法可以確保Version.properties文件(或任何生成的文件)被複制?還是有另一個位置,我可以使用它不會在清理時被gradle吹走,但仍然可以在build中拾取:jar/build:shadowjar?

+0

你使用並行執行('--parallel' or'org.gradle.parallel = true')嗎? 你正在使用哪個版本的Gradle? – bigguy

+0

gradle -version用Groovy 2.4.7返回Gradle 3.3。我沒有啓用--parallel我的build.gradle腳本中的任何地方。 – blyons

回答

0

您不應該在99.99%的時間內調用gradle clean,由於gradle的增量構建功能,它是多餘的。所以只要你正確地定義你的任務輸入和輸出,並從每個任務開始,這個問題就解決了。

無論如何,在你的情況下,錯誤的順序可能是乾淨和其他任務之間的依賴造成的,有沒有?

+0

無論如何,clean和build都沒有被修改過,這會導致其他人從默認的gradle行爲開始。我相信我發佈的答案是正確的:不要在任務中混淆gradle構建目錄(即使是gradle構建任務本身 - 這是我的版本文件增量/副本被調用的地方)。通過將副本的目標設置到其他位置,問題消失並且副本成功。在構建之前調用clean的原因是爲了確保在構建位置沒有舊代碼或測試執行。 – blyons

0

我發現了一種寫出生成的Version.properties文件的方法,該文件將被jar和shadowjar任務拾取。使用gradle copy任務並將修改後的Version.properties文件放入資源目錄中。構建活動包括在資源/後續任務(jar,shadowjar,test等)中找到的文件。我懷疑是因爲乾淨地吹走構建目錄gradle認爲活動在開始構建時已完全完成。我認爲我已經證明情況並非如此。 doFirst {},doLast {}和依賴關係{}似乎不能用作修飾符來清除構建。

相關問題