我遇到了maven的问题。我有一个巨大的多模块项目,改变其结构的可能性有限。
所以,我们说我有3个模块:A,B,C。
目前,没有任何问题。
不幸的是,B在运行时使用C(spring,ioc,...),所以有人将C添加为B的依赖,所以我们在Maven中有一个可怕的循环。构建完成失败(类似于"循环检测到"在日志中)。
我想保持这种方式(在B模块中以某种方式提供C依赖),因为我需要使用所有需要的JAR存档(包括来自C的JAR)编译和交付B.
在完全编译B之后,我可以以某种方式构建C并将其JAR复制到B的目标目录吗?有没有一个插件或工具可供maven用来做到这一点?
如果这篇文章不清楚,我会尝试更详细地描述它。
提前致谢;)
答案 0 :(得分:0)
我将如何做到这一点。来自C&#的pom文件:
<profile>
<id>compile</id>
<dependencies>
<dependency>
use B here but do not use in the main dependencies section
</dependency>
+ other dependencies
</dependencies>
</build>
</profile>
例如,您可以使用mvn compile -Pcompile
来自B&#的pom文件:
<profile>
<id>run</id>
<dependencies>
<dependency>
use C here but do not use in the main dependencies section
</dependency>
+ other dependencies
</dependencies>
</build>
</profile>
使用mvn yourcommandforrunning -Prun
通过这种方式,您可以解决循环依赖性问题。
答案 1 :(得分:0)
听起来有两个问题:
Maven具有依赖关系管理功能,允许您使用&#34;范围&#34;来通知maven这些细微差别。依赖元素的元素。在这种情况下,我认为你想要
<scope>runtime</scope>
请参阅documentation。特别是:
runtime - 此范围指示编译不需要依赖项,但是用于执行。它位于运行时和测试类路径中,但不是编译类路径。
正确使用运行时scope
应解决循环依赖问题。
关于第二个问题,您没有提供足够的信息来提供明确的答案。但是,您几乎肯定希望使用maven插件来利用maven关于依赖关系的信息。例如,如果你想生产单个&#34;脂肪&#34;包含所有内容的jar,你想看看maven-shade-plugin。另一个选项是maven-assembly-plugin,它非常灵活,可以包含程序集中的所有依赖项。还有其他插件可以处理各种其他常见情况。如果您在如何使用特定插件时遇到问题,可能需要制定单独的问题。