Maven依赖冲突

在项目中,如果我们同时A依赖和B,A和B依赖中又同时依赖C,但是依赖的C依赖的版本不同,这会导致依赖冲突,最后编译打包后会有一个Cjar包
问题:这时候,如果 B依赖用的是 C 依赖中旧版本的方法,但是 Maven 最终选择了 A 依赖的新版本的 C 依赖,就会导致B依赖找不到方法。抛出ClassNotFoundException

maven选择依赖原则

最短路径优先原则

假如你用了AB两个依赖,这两个依赖都依赖C

A依赖X,X依赖Y,Y依赖C

B依赖C

那么Maven会直接选择A依赖的那个C

最先声明原则

如果 A 和 B 依赖 C,两者依赖长度一样,那么 Maven 会优先选先声明的那一个。

A依赖C

B依赖C

解决方案

排除依赖

<exclusion>

XML 复制代码
<dependency>
  <groupId>com.example</groupId>
  <artifactId>A</artifactId>   <!-- 依赖了 C:1.0 -->
</dependency>
<dependency>
  <groupId>com.example</groupId>
  <artifactId>B</artifactId>
  <exclusions>
    <exclusion>
      <groupId>com.example</groupId>
      <artifactId>C</artifactId>
    </exclusion>
  </exclusions>
</dependency>

此时B最终会依赖A依赖的C

版本锁定

在一个项目中,可能会有多个依赖依赖不同版本的C,一个个排除是不现实的

在父级pom的版本号管理中锁定C的版本号

XML 复制代码
<dependencyManagement>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>C</artifactId>
        <version>3.0</version>
    </dependency>
</dependencyManagement>
相关推荐
文丑颜不良啊19 分钟前
LeetCode2221~2240题目解析
java·leetcode
秋饼33 分钟前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
文丑颜不良啊2 小时前
LeetCode2161~2180题目解析
java·leetcode
讯捷蓝达3 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
文丑颜不良啊4 小时前
LeetCode2141~2160题目解析
java·leetcode
LabVIEW开发4 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
天天被压力5 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力5 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A5 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
金銀銅鐵5 小时前
从一个类名到一张类图:用反射自动生成 PlantUML
java·后端·uml