Java Maven在打包时包含运行时依赖项的方法
我有两个Maven项目,A和B,其中A在编译时依赖于B,但在运行时B需要一些A类 我所做的是: A的pom.xmlJava Maven在打包时包含运行时依赖项的方法,java,maven,jenkins,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> <dependency> <group
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>${B.version}</version>
</dependency>
<dependency>
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>${A.version}</version>
<scope>runtime</scope>
</dependency>
B
B
${B.version}
B的pom.xml
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>${B.version}</version>
</dependency>
<dependency>
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>${A.version}</version>
<scope>runtime</scope>
</dependency>
A.
A.
${A.version}
运行时
当让Jenkins编译项目时,它无法将彼此编译为下游项目,因为它找到了循环依赖项并避免了无限构建循环
因此,我想的是一种只在打包B时(当Jenkins执行mvn package
时)添加a的运行时依赖项的方法,这样Jenkins就不会在pom.xml
文件中找到循环依赖项,并配置下游编译
是否有任何方法可以通过现有的Maven插件或其他方式实现这一点
谢谢重要的是只在
POM部分中定义依赖项,因为这是应用程序使用的唯一配置
如果你摆弄自定义插件来引入你自己的依赖管理思想,你很可能会破坏反应器。即使您的自定义方法适用于常规的mvn clean install
,但当使用-T4
或类似选项启用多线程构建时,它通常会爆炸。在POM中没有明确定义模块构建顺序的方法,因为它是由反应器控制的
在模块之间共享代码的常用方法是创建一个新的模块
C
,该模块由a
和B
共同依赖 重要的是只在
POM部分中定义依赖项,因为这是应用程序使用的唯一配置
如果你摆弄自定义插件来引入你自己的依赖管理思想,你很可能会破坏反应器。即使您的自定义方法适用于常规的mvn clean install
,但当使用-T4
或类似选项启用多线程构建时,它通常会爆炸。在POM中没有明确定义模块构建顺序的方法,因为它是由反应器控制的
在模块之间共享代码的常用方法是创建一个新的模块C
,该模块由a
和B
共同依赖 我也是出于同样的原因写的
它将任何列出的JAR工件添加到使用该插件的WAR文件中。如果没有找到具有相同版本的工件,JAR依赖项将被解析并添加到WAR文件中。我也是出于同样的原因编写的
它将任何列出的JAR工件添加到使用该插件的WAR文件中。如果没有找到具有相同版本的工件,JAR依赖关系将被解析并添加到WAR文件中。我认为将这些类从A移动到B不是一个选项,是吗?这将是最好的做法,因为循环依赖性不好,maven或notHI@MarioTrucco,不幸的是,在这种情况下这不是一个选项:/Try dependencies(
B
fromA
和A
fromB
)并直接包括两者。A在编译时依赖于B,但是在运行时B需要一些A类
,您可能找不到用Maven解决这个问题的“正确”方法(不过可能还有一个解决方法)。您的问题是由您的类设计引起的(A依赖于B,B依赖于A),正如建议的那样,您应该将这两个模块使用的类移动到一个C模块中,这两个模块都将依赖于该模块。我认为将这些类从A移动到B不是一个选项,是吗?这将是最好的做法,因为循环依赖性不好,maven或notHI@MarioTrucco,不幸的是,在这种情况下这不是一个选项:/Try dependencies(B
fromA
和A
fromB
)并直接包括两者。A在编译时依赖于B,但是在运行时B需要一些A类
,您可能找不到用Maven解决这个问题的“正确”方法(不过可能还有一个解决方法)。您的问题是由您的类设计引起的(A依赖于B,B依赖于A),正如建议的那样,您应该将两个模块使用的类移动到一个C模块中,这两个模块都将依赖于该模块。