【问题标题】:Cyclic dependencies on multi-module maven project多模块maven项目的循环依赖
【发布时间】:2019-10-18 13:41:47
【问题描述】:

过去几周,我一直在用 Java 编写一个非常简单的区块链,作为 Intellij 的一个 maven 项目。当我开始这个项目时,我对驻留在单个模块中的所有内容都很好,尽管从技术上讲,需要构建两个工件才能使项目工作(一个可执行的 .jar 用于应用程序/控制逻辑,一个 .war 用于所有通过 tomcat 容器部署的 p2p 东西)。我使用单独的配置文件来构建 .jar 和 .war,并手动执行/部署它们。

然而,我已经厌倦了这一点,并相信将其拆分为一个多模块项目(一个 .war、.jar 和 .ear?也许..)是实现我的目标的唯一方法使用单个命令一次构建和执行/部署所有内容。我已经开始这样做了,但是对两个子模块之间的循环依赖关系感到困惑。我有依赖于网络端的应用程序端的代码,以及依赖于应用程序端的网络端代码。如何通过创建另一个模块和另一个 pom.xml 来解决这个问题?任何建议将不胜感激!请多多包涵,因为我还是 java/maven 的新手,这是我第一次真正破解任何复杂程度的应用程序。

【问题讨论】:

  • 如果您使用的是 Spring,那么最好使用 SpringBoot 项目作为网络应用程序和服务器应用程序双方的解决方案,因为它会自行处理依赖管理,提供约定优于配置的方法,如果我是正确的,您的战争应该使用 JAR 作为依赖项,所以一切都应该在您用于战争文件的 pom 中进行
  • 我没有使用 Spring,虽然当我第一次开始这个项目时我确实考虑过。

标签: java dependency-management multi-module cyclic-dependency


【解决方案1】:

当你的子模块 c1 和 c2 相互依赖时,意味着一个类或包,那么公共包应该在一个单独的模块 c3 中。在 c1 和 c2 项目中添加 c3 作为依赖项。

您不能在 c2 中添加 c1 作为依赖项,在 c1 中添加 c2 作为依赖项。因为当 maven 试图分析你的代码时,由于这种循环依赖,它找不到首先构建哪个模块。

【讨论】:

  • 谢谢,这正是我想要的。我理解为什么循环依赖不存在,我只是在考虑如何制作模块层次结构来解决它时感到困惑。所以说c1是jar模块,c2是war模块。如果 c1 需要来自 c2 的节点包,而 c2 需要来自 c1 的 util 包,为了避免循环依赖,我会将两者都打包到第三个模块中?
  • 是的。那是正确的。我们应该将公共代码保存在一个单独的模块中。我们通常用诸如“核心、共享等”之类的名称来称呼这类模块
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2018-04-19
  • 1970-01-01
  • 2010-12-16
相关资源
最近更新 更多