从您的日志中,您可以找到以下几行:
[DEBUG] com.company.xyz:xyz-integration-lib:jar:0.0.1-SNAPSHOT
[DEBUG] com.company.xyz:xyz-utils:jar:0.0.1-SNAPSHOT:compile
[DEBUG] commons-codec:commons-codec:jar:1.8:compile
[DEBUG] javax.mail:mail:jar:1.4:provided
[DEBUG] javax.activation:activation:jar:1.1.1:provided (version managed from 1.1 by org.jboss.spec:jboss-javaee-6.0:3.0.2.Final)
[DEBUG] org.apache.commons:commons-lang3:jar:3.3.2:compile
[DEBUG] junit:junit:jar:4.8.2:test
[DEBUG] com.thoughtworks.xstream:xstream:jar:1.4.7:compile
[DEBUG] xmlpull:xmlpull:jar:1.1.3.1:compile
[DEBUG] xpp3:xpp3_min:jar:1.1.4c:compile
[DEBUG] joda-time:joda-time:jar:2.4:compile
[DEBUG] org.assertj:assertj-joda-time:jar:1.1.0:test
[DEBUG] org.assertj:assertj-core:jar:1.3.0:test
[DEBUG] org.apache.httpcomponents:httpclient:jar:4.3.5:compile
[DEBUG] org.apache.httpcomponents:httpcore:jar:4.2.1:compile (version managed from 4.3.2 by org.jboss.as:jboss-as-parent:7.2.0.Final)
[DEBUG] commons-logging:commons-logging:jar:1.1.3:compile
[DEBUG] org.slf4j:slf4j-api:jar:1.7.7:compile
[DEBUG] org.slf4j:slf4j-log4j12:jar:1.7.7:compile
[DEBUG] log4j:log4j:jar:1.2.17:compile
[DEBUG] org.mockito:mockito-all:jar:1.9.5:test
[DEBUG] org.powermock:powermock-module-junit4:jar:1.5.5:test
[DEBUG] org.powermock:powermock-module-junit4-common:jar:1.5.5:test
[DEBUG] org.powermock:powermock-core:jar:1.5.5:test
[DEBUG] org.javassist:javassist:jar:3.18.1-GA:test (version managed from 3.18.2-GA by org.springframework.boot:spring-boot-dependencies:1.1.4.RELEASE)
[DEBUG] org.powermock:powermock-reflect:jar:1.5.5:test
[DEBUG] org.objenesis:objenesis:jar:2.1:test
[DEBUG] org.powermock:powermock-api-mockito:jar:1.5.5:test
[DEBUG] org.powermock:powermock-api-support:jar:1.5.5:test
您可以在哪里看到javassist
and httpcore
某些传递依赖项会删除版本,并且javax.activation
版本提高一。
当多个项目依赖项依赖于同一库并且已定义对该库的不同版本的依赖项时,就会发生这种情况。这可能很烦人,因为通常您无法更改父 POM 或其依赖项影响传递依赖项版本的方式。
调解规则自Maven 文档 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 -> C -> D 2.0 和 A
-> E -> D 1.0,那么构建 A 时将使用 D 1.0,因为从 A 到 D 经过 E 的路径较短。您可以显式添加一个
A 中对 D 2.0 的依赖以强制使用 D 2.0
但是,您可以做的是自己管理依赖项版本。这称为依赖管理,如相同文档所述:
依赖管理 - 这允许项目作者直接
指定遇到工件时要使用的工件版本
在传递依赖项或没有版本的依赖项中
已指定。在上一节的示例中,依赖项
直接添加到 A,即使它没有被 A 直接使用。
相反,A 可以将 D 作为依赖项包含在其 dependencyManagement 中
部分并直接控制在以下情况下使用 D 的版本:
它曾经被引用过。
因此,您只需添加:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>bar</groupId>
<artifactId>foo</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
到您自己的 POM 中,这将始终覆盖通过依赖项中介为您的传递依赖项定义的任何版本。