我们如何解决Maven循环依赖?
假设A是父项目,B和C是子项目。如果B依赖于C,而C依赖于B,除了有一个不同的项目之外,还有什么方法可以解决这种循环依赖关系吗?
Maven不允许项目之间的循环依赖,否则就不清楚首先构建哪个项目。所以你需要摆脱这个循环。一个解决方案是您已经提到的,创建另一个项目。另一种方法是将一些类从B移到C,反之亦然。或者有时候,如果不需要有两个项目,将项目B和项目C合并为一个项目也是正确的。
但是如果不了解和分析为什么你的项目相互依赖,就很难提出最好的解决方案。
所以我建议你可以使用像JDepend或InteliJ分析工具这样的工具来找到有问题的类,并在此基础上为你的软件找到更好的设计。
大多数时候,我创建接口模块和实现模块之类的东西,这样可以摆脱大多数循环。查看Dormouse在这个线程中的答案,并搜索依赖倒置原则以获得有关此主题的更多来源。
创建一个新项目确实是一个解决方案。
依赖倒置是第二个可能的解决方案。
参考这里的无循环依赖原则。
这里是依赖倒置原则
假设A项目依赖于B, B项目依赖于A项目
- 创建新项目并移动所有公共类。这是第一个首选选项。
- 尝试将一个依赖作为运行时依赖(例如,A在编译时依赖于B, B在运行时依赖于A)。这将有助于解决先构建哪个jar。在这种情况下,应该先构建B jar,然后再构建a jar。在这里,运行时意味着可以通过反射调用API。
我将介绍如何修复这些循环依赖的问题。
我有两个相互包含的模块。我删除了双方的依赖关系,设置了RabbitMQ消息系统,并创建了直接交换。因此,当我需要module1的东西时,我向RabbitMQ发送消息,并从module2获得响应和处理数据。我认为这是集成组件的更好的方法,它是松散的集成。