2014-03-13 96 views
5

如何排除父定義的compile project依賴項?模塊Gradle - 子項目排除父項定義的項目依賴關係

結構如下:

- build.gradle 
- settings.gradle 
- MAIN_MODULE_1 
    - build.gradle 
- MODULE1 
    - build.gradle 
- MODULE2 
    - build.gradle 
- MODULE3 
    - build.gradle 
- MODULE4 
    - build.gradle 

和依賴性模式應該是:

- MODULE1 <- MAIN_MODULE_1 
- MODULE2 <- MAIN_MODULE_1 
- MODULE3 <- MAIN_MODULE_1 
- MODULE4 <- MAIN_MODULE_1 

這意味着,具有

// build.gradle 
subprojects { 
    apply plugin: 'java' 
    dependencies { 
    compile project('MAIN_MODULE_1') 
    } 
} 

// settings.gradle 
include ':MAIN_MODULE_1' 
include ':MODULE1' 
include ':MODULE2' 
include ':MODULE3' 
include ':MODULE4' 

將在其自身上創建的MAIN_MODULE_1循環依賴,這是錯誤的。

並且在每個模塊(總數不是4但是120)中有依賴關係對我來說似乎是錯誤的。

回答

10

可以有條件地應用相關性只有當你是不是在項目MAIN_MODULE_1

dependencies { 
    if (!project.name.equals("MAIN_MODULE_1")) { 
     compile project(':MAIN_MODULE_1') 
    } 
    } 

答案下面是一個清晰的解決方案。

+0

哇來,這是真的在屁股痛,但它幫助。謝謝 –

13

您可以使用配置塊:

project(':MAIN_MODULE_1') { 
    apply plugin: 'java' 
} 

configure(subprojects - project(':MAIN_MODULE_1')) { 
    apply plugin: 'java' 
    dependencies { 
    compile project('MAIN_MODULE_1') 
    } 
} 

答案從該另一個問題Gradle exclude plugin in main project for specific subproject(s)

+0

澄清這段代碼的用途嗎?那個「 - 」在扔我。 Java背景。 – user447607

+2

我認爲這是一個算術運算,並轉換爲「子項目集合減去子項目MAIN_MODULE_1」。 –

相關問題