You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

父/子POM含同一依赖不同版本时Maven版本解析规则问询

Maven依赖版本解析规则(父POM vs 子POM/依赖冲突场景)

一、父POM与子POM声明同依赖不同版本的解析规则

当父POM和子POM直接声明同一依赖的不同版本(未使用<dependencyManagement>)时,子POM中声明的版本会生效,这完全符合Maven官方的「就近定义」规则。

Maven官方关于依赖调解(Dependency Mediation)的核心规则第一条明确:

最近的定义优先(Nearest Definition):当一个依赖在依赖树的多个位置出现时,距离当前项目根节点路径最短的那个版本会被选中。

具体到父/子POM场景:父POM的依赖是通过继承传递到子项目的,属于间接依赖层级;而子POM直接声明的依赖是项目自身依赖列表的一部分,路径长度更短(子项目→目标依赖,对比父POM的子项目→父POM→目标依赖),因此子POM的版本优先级更高。比如你给出的示例,父POM声明1.1版本,子POM声明1.0版本,最终构建时会使用1.0版本。

二、common-lib与其他依赖的同依赖版本冲突处理

当项目中common-lib依赖和其他依赖引入了同一第三方依赖的不同版本时,Maven遵循以下明确的行为规范:

  • 路径长度优先:比较冲突依赖在依赖树中的路径长度,路径更短的版本会被选中。例如:
    • 若common-lib引入目标依赖的路径是项目→common-lib→xxx(长度2),另一个依赖的路径是项目→A→B→xxx(长度3),则会选用common-lib引入的xxx版本。
  • 路径长度相同时,声明顺序优先:如果两个冲突依赖的路径长度一致(比如项目→common-lib→xxx和项目→other-lib→xxx,路径长度均为2),Maven会选择在POM中先声明的依赖所引入的版本。

内容的提问来源于stack exchange,提问作者Cagepi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:03:19