2016-06-27 101 views
5

我正在將Java項目從Ant遷移到Gradle。我認爲最好的解決方案是使用Gradle的多項目支持,但是我找不到一種擺脫循環依賴的方法。如何解決Gradle中的循環依賴關係

原來的項目是設置有這樣的佈局:

- project/ 
    - common/ 
    - product-a/ 
    - product-b/ 

的關係product-b之間commonproduct-a,並且是棘手的。 common取決於product-aproduct-b,具體取決於配置文件。同樣,product-aproduct-b依賴於common,而與配置屬性無關。 product-aproduct-b將永遠不會同時構建。

我想到了一個快速的解決方案是使用像這樣的project/build.gradle

project(':product-a') { 
    dependencies { 
     compile project(':common') 
    } 
} 

project(':product-b') { 
    dependencies { 
     compile project(':common') 
    } 
} 

接下來,我想過讓一個辦法讓這個接近的只是product-a工作。這使我這個:

project(':common') { 
    dependencies { 
     compile project(':product-a') 
    } 
} 

這將拋出一個異常,對於具有循環依賴。

我已經考慮通過建立由commonproduct-a/product-b,或者使用多態預期的類接口重構product-aproduct-b,但在此之前我和這兩個的往前走,有沒有更好的辦法有做到這一點搖籃?我還沒有準備好擺脫這個技術債務。

回答

5

移除循環依賴不能用構建欺騙來解決。你將不得不重構你的模塊,所以不再有循環依賴。根據你的模塊名稱,沒有其他信息,我想你會想要提取依賴於「product- *」的「common」部分並將其放入一個新模塊。