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

相关推荐
愿得一猪蹄11 分钟前
# Java线程池实战,别再new Thread了
java
ee又momo20 分钟前
# 深入理解Java注解,从使用到自定义
java
霸道流氓气质1 小时前
AI智能博客平台实战:RAG增强写作、多Agent协作与语义检索的Vue3 + Spring AI全栈实现
java·人工智能·spring
打工仔折腾 AI1 小时前
LangChain 工具调用实战:从 Tool 定义到 Agent 执行链路拆解
java·前端·人工智能·后端·python·langchain·ai agent 实战
哦虎!1 小时前
【JavaEE】网络原理 - TCP/IP
java
东风微鸣1 小时前
把 Tailscale 接进 Prometheus 监控
java·数据库·prometheus
看浪的路人1 小时前
第9讲:大模型应用监控与可观测性——OpenTelemetry + Prometheus + Grafana 全链路追踪
java·前端·spring
大侠归来1 小时前
事务能回滚吗?Pipeline 算事务吗?
java·数据库·oracle
蜗牛互联网1 小时前
Python调用Gemini Structured Outputs实现工单路由门禁
java·开发语言·人工智能·python
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 产品定位、功能模块与客户端原型解读
java·开发语言·交友