我有两个Maven项目,A和B,其中A在编译时依赖于B,但在运行时B需要一些A类。
我做的是:
A的pom.xml
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>${B.version}</version>
</dependency>
B&#39的pom.xml
<dependency>
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>${A.version}</version>
<scope>runtime</scope>
</dependency>
当让Jenkins编译项目时,它无法作为下游项目相互编译,因为它找到循环依赖并避免无限构建循环。
所以,我认为只有在打包B时(Jenkins执行mvn package
时)才能添加A的运行时依赖关系,以便Jenkins在{{1}中找不到循环依赖关系文件并配置下游编译。
有没有办法用现有的Maven插件或其他方式实现这一目标?
谢谢
答案 0 :(得分:3)
我出于同样的原因写了this Maven plugin。
它将任何列出的JAR工件添加到使用此插件的WAR文件中。如果没有找到具有相同版本的工件,则解析JAR依赖关系并将其添加到WAR文件中。
答案 1 :(得分:2)
重要的是仅在<dependency>
POM部分内定义依赖关系,因为这是Maven reactor使用的唯一配置。
如果您使用自定义插件来介绍自己的依赖管理想法,您很可能会破坏反应堆。即使您的自定义方法适用于常规mvn clean install
,当-T4
或类似选项用于启用多线程构建时,它通常会爆炸。根本没有办法在POM中明确定义模块构建顺序,因为它由反应器控制。
在模块之间共享代码的常用方法是创建一个C
和A
所依赖的新模块B
。