覆盖父pom中定义的库版本

时间:2012-10-25 17:44:00

标签: maven pom.xml

我已在父pom中为库A定义了4.3版本,但是在子pom指定的项目模块中,需要版本2.5的A.我面临的问题是两个版本都被保留,因此我遇到了冲突。

请告知如何解决问题。

2 个答案:

答案 0 :(得分:8)

通常,建议在给定时间在类路径中只有一个版本的依赖项。以这种方式执行将允许您确切地知道将在运行时使用的类的版本。

为避免版本冲突,请尝试指定您的依赖关系:

<dependency>
    <groupId>commons-daemon</groupId>
    <artifactId>commons-daemon</artifactId>
    <version>1.0.1</version>
    <exclusions>
        <exclusion>
            <groupId>some_group</groupId>
            <artifactId>some_artifact</artifactId>
        </exclusion>
    </exclusions>
</dependency>

您需要在版本2.5中指定冲突工件的groupIdartifactId

答案 1 :(得分:6)

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

  

依赖关系中介 - 确定在遇到多个版本的工件时将使用哪个版本的依赖关系。目前,Maven 2.0仅支持使用“最接近的定义”,这意味着它将在依赖树中使用与项目最接近的依赖项版本。您可以通过在项目的POM中明确声明它来保证版本。请注意,如果两个依赖关系版本在依赖关系树中处于相同的深度,则直到Maven 2.0.8没有定义哪一个会赢,但是自Maven 2.0.9开始,它就是声明中的顺序:第一个声明获胜。

     
      
  • “最近定义”表示所使用的版本将是依赖树中与项目最接近的版本,例如。如果A,B和C的依赖关系被定义为A - >; B - &gt; C - &gt; D 2.0和A - &gt; E - &gt; D 1.0,然后在构建A时将使用D 1.0,因为从A到D到E的路径更短。您可以在A中向D 2.0显式添加依赖项以强制使用D 2.0
  •   

听起来版本2.5被另一个依赖项传递。这使版本4.3和2.5的长度相同。

  • 项目 - &gt;家长 - &gt; A 4.3
  • 项目 - &gt;依赖性 - &gt; A 2.5

通过在项目中明确定义A 2.5的依赖关系,它将是最近的并覆盖任何其他版本。