2016-11-09 77 views
1

我想運行一個gradle任務,該任務在gradle嘗試解析依賴關係之前獲取其他源並設置它們。在解決依賴關係之前運行gradle任務

在build.gradle中,有一項任務可以獲取子項目的源代碼。該任務需要在Gradle嘗試解決依賴性之前運行,因爲子項目是依賴項的一部分。該任務涉及從遠程存儲庫獲取源代碼並替換一些build.gradle文件以使構建成爲可能。

現在會發生什麼事是:

  • 我運行任務。
  • Gradle嘗試在實際運行任務之前解決依賴關係。
  • 它失敗了,因爲其中一個依賴需要子項目(我的任務應該獲取的源)。

當然,解決依賴關係是「配置」構建階段的一部分,所以很明顯爲什麼這個任務在後面運行。問題是如何讓它在之前運行。

當然,如果我用一個單獨的bash腳本替換我的gradle任務並在gradle執行任何操作之前手動運行它,我當然可以工作。但是,這意味着我在gradle和bash腳本中複製了一些變量(如版本名稱和git標籤名稱)。這些變量在gradle中被用於其他目的,並且在兩個地方使用它們是不好的。還有其他的原因,我想避免這種情況,其和爲之一 - 使用bash腳本將意味着在gradle這個從頭到尾做我們構建失敗...

+1

請發佈您的項目級別build.gradle和應用程序模塊的build.gradle以及在gradle控制檯和監視器中輸出您的接收錯誤。 – apelsoczi

回答

0

首先你是不正確,解決依賴關係是部分的「配置」階段。如果您使用FileCollection的懶惰評估,那麼它實際上將在執行階段解決。第一次調用resolve()時會解決配置問題。請參閱javadoc瞭解導致配置被解決的方法。據我所知核心gradle這個代碼將不會解決配置中的「配置」階段,但您的自定義代碼可能會導致這個(我建議你重構,如果是這種情況)

你可以做這樣的事情:

dependencies { 
    // this is lazy evaluated 
    compile fileTree(dir: "$buildDir/dynamicJars", include: "*.jar") 
} 

task getDynamicJars(type: Copy) { 
    from zipTree('path/to/somefile.zip') 
    into "$buildDir/dynamicJars" 
} 

compile.dependsOn getDynamicJars