如何解决Maven中的循环依赖?

时间:2013-05-09 18:24:23

标签: maven dependencies cyclic

我们如何解决Maven循环依赖?

假设A是父项目,B和C是子项目。如果B依赖于C而C依赖于B,除了拥有不同的项目之外,还有什么方法可以解决循环依赖性。

4 个答案:

答案 0 :(得分:31)

Maven不允许项目之间存在循环依赖关系,因为否则不清楚首先要构建哪个项目。所以你需要摆脱这个循环。一个解决方案就是你已经提到的,创建另一个项目。另一个是将一些类从B移动到C,反之亦然。或者有时将项目B和C合并到一个项目是正确的,如果不需要两个项目。

但是,如果不了解和分析为什么你的项目相互依赖,那么建议最好的解决方案是很困难的。

因此,我建议您使用JDependInteliJ分析工具等工具查找有问题的类,并根据它们为您的软件找到更好的设计。

大多数时候,我创建类似接口模块和实现模块的东西,它摆脱了大多数周期。

答案 1 :(得分:8)

创建一个新项目确实是一个解决方案。

依赖性倒置是第二种可能的解决方案。

有关非循环依赖原则,请参阅here

并且here用于依赖性倒置原则。

答案 2 :(得分:0)

我将介绍如何解决循环依赖问题。

我有两个相互包含的模块。我删除了双方的依赖关系,并设置RabbitMQ消息传递系统并创建了直接交换。因此,当我需要来自module1的东西时,我会向RabbitMQ发送消息,并从module2获取响应和处理数据。我认为这是集成组件的更好方法,并且是松散集成。

答案 3 :(得分:0)

假设 A 项目依赖于 B,B 依赖于 A。

  1. 正在创建新项目并移动所有常见类。这是第一个首选选项。如果没有,请选择选项 2。
  2. 尝试将一个依赖项作为运行时依赖项(例如,A 是编译时依赖于 B,B 是运行时依赖于 A)。这将有助于解决首先构建哪个 jar。在这种情况下,应该先构建 B jar,然后构建 A。这里,运行时意味着可以通过反射调用 API。