She*_*sha 5 java gradle cyclic-dependency
我最近开始开发一个 Java 项目,其中包含一些子项目。他们都是gradle。因此,假设有两个项目 A 和 B 已经实施。而且我要介绍另一个gradle项目C,依赖是这样的。
所以我需要在没有循环依赖错误的情况下实现这个项目 C,因为它是我尝试用 gradle 构建项目时给出的。我看到一些答案,Interface 是一个解决方案。但就我而言,项目 A 和 B 是大型项目,我无法考虑如何为它们引入接口。我唯一能做的就是为项目 C 引入接口。那么有没有办法解决我在这些情况下的问题?如果没有,有什么方法可以拥有这样的一个?请注意,这些 A、B、C 项目是单独的项目,因此不能合并为一个项目。
当你的依赖图中有一个循环时,没有什么魔法可以让你编译你的项目。您需要进行一些重构以消除循环。
处理循环依赖的方法是拆分模块并重复该操作,直到循环消失(或使用下面给出的替代方案)。
初始点:
A ?? B ?? C
? ?
???????????
Run Code Online (Sandbox Code Playgroud)
先从提取的部分A被用来通过C一个单独的模块(我们称之为D):
A ?? B ?? C
? ?
???? D ????
Run Code Online (Sandbox Code Playgroud)
如果D不依赖于任何其他模块,您就完成了。否则继续剪断电线。
假设 D stil 有 B 依赖:
A ?? B ?? C
? ? ?
? ? ?
???? D ????
Run Code Online (Sandbox Code Playgroud)
您需要类比地从中提取公共部分B(我们称之为E):
A ?? B ?? C
? ? ?
? ? ?
? E ?
? ? ?
? ? ?
???? D ????
Run Code Online (Sandbox Code Playgroud)
就像以前一样 - 如果E仍然有问题的依赖项,请重复。
假设 E stil 依赖于 C:
A ?? B ?? C ??
? ? ? ?
? ? ? ?
? E ???? ?
? ? ?
? ? ?
???? D ???????
Run Code Online (Sandbox Code Playgroud)
我们做什么?Obvioulsy 分裂C(通过提取F):
A ?? B ?? C ??
? ? ? ?
? ? ? ?
? E ?? F ?
? ? ?
? ? ?
???? D ???????
Run Code Online (Sandbox Code Playgroud)
继续循环直到到达新引入的模块在模块图中不再有依赖关系的点。
例如在第 3) 点中,如果我们假设它F是无依赖的,我们就完成了。这意味着 using Aby的问题部分C已被提取到D ?? E ?? F子图中。
请注意,如果在合理的预算范围内完全可行,它可能并不那么容易。因此,在某些情况下可能会更好回落到不太理想的选择:复制代码A这C依赖。
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |