我最近开始开发一个Java项目,该项目中包含一些子项目。他们都是摇摇欲坠的。假设有两个已经实施的项目A和B。而且我将介绍另一个摇摇欲坠的项目C。依赖关系就是这样。
因此,我需要实现此项目C且没有循环依赖项错误,这是我尝试使用gradle构建项目时给出的错误。我看到一些答案,认为Interface是为此的解决方案。但就我而言,项目A和B是大型项目,我无法想到如何为它们引入接口。我唯一能做的就是为项目C引入接口。那么有没有办法解决这些情况下的问题呢?如果没有,拥有这样一个人的方法是什么?并且请注意,这些A,B,C项目是单独的项目,因此它们不能合并为一个项目。
答案 0 :(得分:1)
在依赖图中出现循环时,没有任何魔术可以让您编译项目。您需要进行一些重构以消除循环。
处理循环依赖关系的方法是将模块拆分为较小的模块,然后重复进行直到消除循环为止。
1)首先将C所使用的A部分提取到一个单独的模块中(我们称其为D):
A -> B -> C
| |
| |
--> D <--
如果D不依赖于任何其他模块,那么您就完成了。如果需要,则需要继续拆分。
2)假设D stil取决于B:
A -> B -> C
| ^ |
| | |
--> D <--
您需要类似地从B中提取通用部分(我们称其为E):
A -> B -> C
| | |
| v |
| E |
| ^ |
| | |
--> D <--
再一次,如果E没有依赖性导致循环-您就完成了。如果没有,请继续。
3)假设E stil取决于C:
A -> B -> C --
| | ^ |
| v | |
| E --- |
| ^ |
| | |
--> D <------
我们该怎么办? vi虫C(提取F):
A -> B -> C --
| | | |
| v v |
| E -> F |
| ^ |
| | |
--> D <------
请注意,这根本不可能那么容易(在相当长的时间和/或预算之内)。
您还可以考虑复制C依赖的A中的代码。