我有一个依赖关系如下:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2</version>
<scope>compile</scope>
</dependency>
当我部署httpcore.4.1.4
一切正常时,这会拉下另一个引发ClassDefNotFound的依赖项httpcore.4.2
。
我添加了两个依赖项,如下所示:
<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>
仍然面临同样的问题,即:mvn关闭httpcore.4.1.2
而不是httpcore.4.2
我该如何解决这个问题?
编辑:
加入;
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
答案 0 :(得分:6)
您可能具有传递依赖关系,其他依赖关系依赖于您不想要的版本。
要概述所有依赖项,直接和传递,请尝试:
mvn依赖:树
如果您发现同一依赖项的不同版本之间发生崩溃,那么您应该做的第一件事是确定崩溃是否至关重要(您是否需要两者?)如果不是,请升级以使最低依赖性版本变得相同到最高点。如果它是传递依赖,请考虑升级它的版本。
如果您只想锁定特定版本的依赖项,您可以选择:
排除传递依赖:
<dependency>
<groupId>com.something</groupId>
<artifactId>something</artifactId>
<exclusions>
<exclusion>
<groupId>com.somethingElse</groupId>
<artifactId>somethingElse</artifactId>
</exclusion>
</exclusions>
</dependency>
包含特定版本:
<dependency>
<groupId>com.somethingElse</groupId>
<artifactId>somethingElse</artifactId>
<version>2.0</version>
</dependency>
在pom中显式添加的任何依赖项版本都将覆盖同一groupId / artifactId的任何传递依赖项的版本。
虽然有点谜题,但您应该尝试获取依赖项的兼容版本,即具有相同版本传递依赖项的版本。