2011-06-07 31 views
3

我有我的安裝過程分爲三個階段:gradle:unsorted dependsOn任務,如何處理?

1)下載 2)解壓縮 3)配置

下載,使用ant.get和ant.checksum,所以我建立我自己的DownloadTask課,那麼在構建:

task download (type: DownloadTask) { 
    url = url 
    checksumAlgorithm = 'MD5' 
    destFile = zipFile 
} 

所以我帶着4項任務:

task download {...} 
task unzip {...} 
task configure {..} 
task install(dependsOn: [download, unzip, configure]) {} 

但我注意到依賴不尊重排序順序,http://issues.gradle.org/browse/GRADLE-427

所以..這裏的解決方法是怎麼樣的?

我不能將這個任務作爲方法移動,因爲下載它使用我的DownloadTask類。我可以將所有方法(甚至是DownloadTask)都移動,但似乎並不是這裏最好的解決方案。

謝謝

+1

我可能是錯的(因此評論),但不能'configure' dependOn了'unzip'任務,而'unzip'任務dependOn'download'。那麼'install'可能僅僅依賴於'configure'? – 2011-06-07 14:54:07

+1

@tim:這是一個很好的解決方案,但問題比這個例子更復雜(我在多項目環境中工作,所以我需要重用一些此任務,例如) – Hugo 2011-06-07 16:43:20

回答

10

好了,你也可以通過手工調用你的依賴,如果這是給你的任何幫助:

task install << { 
    download.execute() 
    unzip.execute() 
    configure.execute() 
} 

我不認爲這是真正的搖籃想法,但對於我的多項目構建,這工作得很好。

問候,

+0

您可能需要看看這個,我發現在stackoverflow [重要的是要注意,TaskInternal#execute是一個內部方法,不能從構建腳本調用。](http://stackoverflow.com/questions/21612729/understanding-gradle -task依賴性-dependson) – karate 2015-10-22 08:24:26

2

正如蒂姆提到你可以配置你的構建有這些依賴關係。 「重用」任務意味着什麼?您可以在此處使用自動裝配,而不是使用dependsOn屬性。

Autowire表示您將任務下載的輸出聲明爲解壓縮任務的輸入等等。在上面的例子中,url將是您的下載任務的輸入,而destFile是輸出。這種方法可以輕鬆地重用每個任務,並且不需要顯式排序。在Gradle用戶指南的第14.8章中,您可以找到這種自動裝配的簡要介紹(http://www.gradle.org/current/docs/userguide/more_about_tasks.html#N10D4D)。查看關於TaskInputs和TaskOutputs(本章中提到)的Javadoc。

問候, 勒