Java 多模块maven项目的循环依赖性

Java 多模块maven项目的循环依赖性,java,dependency-management,multi-module,cyclic-dependency,Java,Dependency Management,Multi Module,Cyclic Dependency,过去几周,我一直在用java编写一个非常简单的区块链,作为Intellij的一个maven项目。当我开始这个项目时,我对驻留在单个模块中的所有内容都很满意,尽管从技术上讲,项目需要构建两个工件才能工作(一个用于应用程序/控制逻辑的可执行文件.jar和一个用于通过tomcat容器部署的所有p2p内容的.war)。我使用单独的概要文件来构建.jar和.war,并手动执行/部署它们 然而,我已经厌倦了这一点,并且相信将其分解成一个多模块项目(a.war、.jar和.ear?也许……)是实现我的目标的唯

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


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

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


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

如果您使用的是Spring,那么最好将SpringBoot项目作为网络应用程序和服务器应用程序的解决方案,因为它将通过提供约定优先于配置的方法来管理依赖关系,如果我是正确的,您的war应该使用JAR作为依赖关系,所以,在你使用的POM中,一切都应该继续进行,而不是使用Spring,虽然当我第一次开始这个项目时,我确实考虑过了。谢谢,这正是我所要寻找的。我理解为什么循环依赖不可能存在,我只是在思考如何构建模块层次结构来修复它时感到困惑。假设c1是jar模块,c2是war模块。如果c1需要c2的nodes包,c2需要c1的util包,为了避免循环依赖,我会将这两个包打包到第三个模块中?是的。没错。我们应该将通用代码保存在单独的模块中。我们通常用诸如“核心、共享等”之类的名称来称呼这类模块