Maven 依赖调解的两大原则

Maven 依赖调解是 Maven 解决项目中多个依赖版本冲突的机制。当项目直接或间接依赖了同一个库的不同版本时,Maven 需要决定最终使用哪个版本。

依赖调解的两大原则

最短路径优先

  • 如果不同版本的依赖通过不同路径引入,Maven 会选择依赖路径最短的版本

    A -> B -> C -> D 1.0
    A -> E -> D 2.0

这里 D 2.0 的路径更短(A->E->D vs A->B->C->D),所以会选择 D 2.0

先声明优先

  • 如果两个依赖路径长度相同,则在 POM 文件中先声明的依赖会被采用

    A -> B -> D 1.0
    A -> C -> D 2.0

如果 B 在 POM 中先于 C 声明,则选择 D 1.0


补充:

查看依赖关系

可以使用以下命令查看依赖树,分析依赖冲突:

复制代码
mvn dependency:tree

解决依赖冲突的方法

  1. 显式声明版本:在 POM 中直接指定你想要的版本

  2. 排除依赖 :使用 <exclusions> 排除不需要的传递性依赖

  3. 使用 dependencyManagement:在父 POM 中统一管理版本

  4. 使用 <optional>true</optional>:将依赖标记为可选

相关推荐
一 乐9 分钟前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·后端
大飞哥~BigFei2 小时前
RabbitMq消费延迟衰减重试实现思路
java·分布式·rabbitmq
有趣的野鸭2 小时前
JAVA课程十一次实验课程主要知识点示例
java·前端·数据库
q***07144 小时前
Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
java·spring boot·后端
q***49864 小时前
Spring Boot 3.4 正式发布,结构化日志!
java·spring boot·后端
沐浴露z7 小时前
【微服务】基本概念介绍
java·微服务
Z3r4y7 小时前
【代码审计】RuoYi-4.7.3&4.7.8 定时任务RCE 漏洞分析
java·web安全·ruoyi·代码审计
Kuo-Teng8 小时前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
Jooou9 小时前
Spring事务实现原理深度解析:从源码到架构全面剖析
java·spring·架构·事务