下面的依赖项会拉取另一个依赖项:httpcore.4.1.4
.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2</version>
<scope>compile</scope>
</dependency>
这样做会在部署期间抛出ClassDefNotFound
。
使用httpcore.4.2
,一切都正常。
我甚至将这两个依赖项直接添加到我的pom中:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2</version>
<scope>compile</scope>
</dependency>
这并没有改变什么,我仍然面临着同样的问题:maven将httpcore.4.2
降级为httpcore.4.1.2
。dependencyManagement
看起来像这样:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
1条答案
按热度按时间vlju58qv1#
你可能有一个可传递的依赖项,你的其他依赖项依赖于你不想要的版本。
要获得所有依赖项(直接和传递)的概述,请尝试:
mvn依赖项:树
如果发现同一依赖项的不同版本之间发生了崩溃,那么首先应该弄清楚这个崩溃是否是关键性的(是否两者都需要?))如果不是,则升级,以便最低依赖版本将变得等于最高依赖版本。如果它是一个可传递依赖项,请考虑升级此的版本。
如果你只想锁定依赖项的特定版本,你有一些选择:
排除传递依赖关系:
包含特定版本:
在pom中显式添加的任何依赖版本将覆盖同一groupId/artifactId的任何传递依赖的版本。
虽然有点令人困惑,但您应该尝试获得依赖项的兼容版本,即具有相同版本可传递依赖项的版本。