[英]Resolve circular dependency in gradle
我最近開始開發一個 java 項目,其中包含一些子項目。 它們都是 gradle。 因此,假設有兩個項目 A 和 B 已經實施。 我要介紹另一個gradle項目C。 依賴關系是這樣的。
所以我需要在沒有循環依賴錯誤的情況下實現這個項目 C,因為它是在我嘗試使用 gradle 構建項目時給出的。 我看到一些答案,Interface 是一個解決方案。 但在我的情況下,項目 A 和 B 是大型項目,我想不出如何為它們引入接口。 我唯一能做的就是為項目 C 引入接口。 那么有沒有辦法解決我在這些情況下的問題? 如果沒有這樣的方法是什么? 請注意,這些 A、B、C 項目是單獨的項目,因此不能合並為一個項目。
當你的依賴圖中有一個循環時,沒有什么魔法可以讓你編譯你的項目。 您需要進行一些重構以消除循環。
處理循環依賴的方式是將模塊拆分為更小的模塊,然后重復此操作,直到消除循環。
1)首先將C使用的A部分提取到一個單獨的模塊(我們稱之為D):
A -> B -> C
| |
| |
--> D <--
如果 D 不依賴於任何其他模塊,您就完成了。 如果是,則需要繼續拆分。
2)假設D仍然依賴於B:
A -> B -> C
| ^ |
| | |
--> D <--
您需要從 B 中類比提取公共部分(我們稱之為 E):
A -> B -> C
| | |
| v |
| E |
| ^ |
| | |
--> D <--
再一次,如果 E 沒有導致循環的依賴項 - 你就完成了。 如果沒有 - 繼續。
3)假設E仍然依賴於C:
A -> B -> C --
| | ^ |
| v | |
| E --- |
| ^ |
| | |
--> D <------
我們做什么? 明顯拆分 C(提取 F):
A -> B -> C --
| | | |
| v v |
| E -> F |
| ^ |
| | |
--> D <------
請注意,如果完全可行(在合理的時間和/或預算內),它可能並不那么容易,因此考慮到上下文,最好只復制 C 所依賴的 A 中的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.