项目A包含模块B,C。
在一个pom.xml 中,我定义了像。
这样的属性 <properties>
<test.version>1.0.0-SNAPSHOT</smp.version>
</properties>
<modules>
<module>B</module>
<module>C</module>
<modules>
moduleB&#39; pom.xml如下所示,
<modules>
<module>X</module>
</modules>
模块X ,它对 Proj1 (某些外部jar)具有依赖性,并且在父pom test.version = 1.0.0-SNAPSHOT中定义了vesrion < / p>
<dependency>
<groupId>group1</groupId>
<artifactId>Proj1</artifactId>
<version>${test.version}</version>
</dependency>
现在模块C 依赖于模块B ,因为模块C也可以单独部署,B所需的所有依赖项都需要包含在C. < / p>
现在问题在于构建项目A ,即我传递的父项目-Dtest.version = 1.0.0
所以模块B使用proj1 1.0.0 版本构建
但是模块C(因为它依赖于B)它是使用Proj1的 1.0.0-SNAPSHOT 版本创建的。在构建项目C时,它采用test.version的默认值,这是我不想要的。 B,C都应该引用相同版本的proj1。
编辑:模块C的pom
<dependency>
<groupId>B's group id </groupId>
<artifactId>B</artifactId>
<version>${B's.version}</version>
</dependency>
所以我有
家长A
|
儿童模块B - &gt; B的子模块X - &gt;带测试版的外部proj1 jar
儿童模块C - &gt;依赖于模块B
我知道这很复杂。但我不确定这是否也可以简化。
答案 0 :(得分:1)
我没有理解你的问题,但是<dependencyManagement>
可以帮助你定义交叉依赖版本,只要你把它放在父pom(项目A)文件中。
<dependencyManagement>
<dependency>
<groupId>group1</groupId>
<artifactId>Proj1</artifactId>
<version>${test.version}</version>
</dependency>
</dependencyManagement>
答案 1 :(得分:1)
这并不复杂。请记住 - 依赖层次结构通过perent-child管理,而不是通过模块管理。 这意味着项目A中的模块B,C可能具有不同的父级,具有不同的依赖关系和dependencyManagement定义。 模块标签仅定义在项目A中构建的内容,但不定义如何构建或使用什么依赖项。