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>:将依赖标记为可选

相关推荐
WooaiJava19 小时前
流式TTS音频播放项目 - 面试问答(后端)
java·开发语言
奥升新能源平台19 小时前
奥升充电|充电站用户分层分析与精细化运营策略研究
java·大数据·能源
梵得儿SHI20 小时前
(第十篇)Spring AI 核心技术攻坚全梳理:企业级能力矩阵 + 四大技术栈攻坚 + 性能优化 Checklist + 实战项目预告
java·人工智能·spring·rag·企业级ai应用·springai技术体系·多模态和安全防护
一路向北⁢20 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(三)
java·spring boot·后端·sse
摇滚侠20 小时前
macbook shell 客户端推荐 Electerm macbook 版本下载链接
java·开发语言
程序员布吉岛20 小时前
Java 后端定时任务怎么选:@Scheduled、Quartz 还是 XXL-Job?(对比 + 避坑 + 选型)
java·开发语言
知无不研20 小时前
lambda表达式的原理和由来
java·开发语言·c++·lambda表达式
逍遥德20 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪20 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
Coder_Boy_20 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd