如何处理maven中的复杂依赖?

时间:2016-12-12 13:39:59

标签: java maven

项目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

我知道这很复杂。但我不确定这是否也可以简化。

2 个答案:

答案 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中构建的内容,但不定义如何构建或使用什么依赖项。