48

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

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

4

4 回答 4

41

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

但是,如果不了解和分析您的项目为何相互依赖,就很难提出最佳解决方案。

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

大多数时候,我创建了一个接口模块和实现模块之类的东西,它摆脱了大多数周期。在此线程中查看 Dormouse 的答案并搜索依赖倒置原则以获取有关此主题的更多资源。

于 2013-05-09T20:03:43.997 回答
11

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

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

请参阅此处了解非循环依赖原则。

这里是依赖倒置原则

于 2014-01-20T15:38:31.400 回答
1

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

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

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

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

于 2020-03-30T09:20:08.623 回答