Maven在打包时包含运行时依赖关系的方式

时间:2018-03-30 07:25:07

标签: java maven jenkins

我有两个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插件或其他方式实现这一目标?

谢谢

2 个答案:

答案 0 :(得分:3)

我出于同样的原因写了this Maven plugin

它将任何列出的JAR工件添加到使用此插件的WAR文件中。如果没有找到具有相同版本的工件,则解析JAR依赖关系并将其添加到WAR文件中。

答案 1 :(得分:2)

重要的是仅在<dependency> POM部分内定义依赖关系,因为这是Maven reactor使用的唯一配置。

如果您使用自定义插件来介绍自己的依赖管理想法,您很可能会破坏反应堆。即使您的自定义方法适用于常规mvn clean install,当-T4或类似选项用于启用多线程构建时,它通常会爆炸。根本没有办法在POM中明确定义模块构建顺序,因为它由反应器控制。

在模块之间共享代码的常用方法是创建一个CA所依赖的新模块B