java maven依赖项拉取错误的依赖项

nkcskrwz  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(138)

下面的依赖项会拉取另一个依赖项: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>
vlju58qv

vlju58qv1#

你可能有一个可传递的依赖项,你的其他依赖项依赖于你不想要的版本。
要获得所有依赖项(直接和传递)的概述,请尝试:
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的任何传递依赖的版本。
虽然有点令人困惑,但您应该尝试获得依赖项的兼容版本,即具有相同版本可传递依赖项的版本。

相关问题