2015-06-12 81 views
1

我正在開發一個子項目,這是一個龐大的多項目Gradle構建的一部分。我需要來自這些其他子項目的一些Java類,但我不需要任何依賴關係,因爲我使用的某些庫需要這些類的不同版本。如何在Gradle構建中排除其他子項目的依賴關係?

我最初配置所需的子項目爲

compile project(':other_needed_sub_project') 

然而,在這種情況下gradle eclipse任務添加項目,項目樹。它們的依賴關係出現在類路徑中,導致我的應用程序選擇錯誤的版本。在Eclipse中,包含的項目似乎優先於指定的庫。

作爲一種有效的解決方案,我目前正在建立與現有的Maven構建所需的子項目的罐子,然後用

compile files('../other_needed_sub_project/target/dist/other_needed_sub_project.jar') 

這正是我所需要的 - 沒有任何附加庫。但是這意味着在使用Gradle構建我的子項目之前,我必須運行不同的構建。

Gradle是否可以構建所需的子項目,然後在Eclipse配置中只添加對最終jar的引用?

+0

這被認爲是是Gradle eclipse任務的錯誤行爲。這個行爲在即將發佈的2.5版Gradle發行版中得到了修復。你可能想每晚試試最新的gradle。另外,你可以在這裏找到完整的變更說明:https://github.com/gradle/gradle/commit/2f55576ebdb85e3d9122943e09ac7a5e939445f3 –

回答

4

您可以排除依賴的所有傳遞依賴:

compile('groupId:artifactId:version') { 
    transitive = false 
} 

或者你可以,但我肯定不會推薦這排除每個依賴手工像這樣:

compile('groupId:artifactId:version') { 
    exclude module: 'groupId:artifactId:version' 
    ... 
} 
+1

但這不適用於編譯項目(..)這是如何回答的? – vach

+1

@vach你需要一套額外的括號: 'compile(project(':other_needed_subproject')){transitive = false}' –

相關問題