我已在父pom中为库A定义了4.3版本,但是在子pom指定的项目模块中,需要版本2.5的A.我面临的问题是两个版本都被保留,因此我遇到了冲突。
请告知如何解决问题。
答案 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中指定冲突工件的groupId
和artifactId
。
答案 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的长度相同。
通过在项目中明确定义A 2.5的依赖关系,它将是最近的并覆盖任何其他版本。