本地Maven依赖异常:jakarta.json-api版本与POM不一致排查
Maven多模块依赖版本不一致排查方案
问题背景
Maven多模块项目结构:父模块A包含子模块A1、A2,A1依赖A2。在A1目录执行mvn dependency:tree,显示jakarta.json-api版本为1.1.6且来源于A2;但A2目录执行相同命令时,该依赖版本为2.0.1(A2的POM中明确声明此版本)。已通过在A1显式声明2.0.1版本临时解决,需排查版本不一致根源。
排查步骤
1. 确认A2的实际生效依赖版本
- 在A2目录执行
mvn help:effective-pom,查看最终生成的有效POM中jakarta.json-api的版本,验证是否确实为2.0.1(避免dependency:tree或GUI工具的显示偏差)。 - 检查A2的POM:
jakarta.json-api是直接在<dependencies>中声明,还是通过<dependencyManagement>管控?如果是后者,确认A2自身的依赖是否正确继承了该版本。
2. 排查A1的依赖管理与其他传递依赖
- 查看A1的POM,确认是否存在
<dependencyManagement>节点定义了jakarta.json-api的1.1.6版本(Maven中dependencyManagement的版本会覆盖传递依赖的版本)。 - 在A1目录执行
mvn dependency:tree -Dverbose,查看jakarta.json-api1.1.6的完整依赖路径,确认是否有除A2外的其他依赖传递引入了该版本。
3. 检查父模块A的全局依赖管控
- 查看父模块A的POM,检查是否在
<dependencyManagement>中统一配置了jakarta.json-api的版本:- 如果父模块定义了1.1.6版本,A1会继承此版本并覆盖A2传递的2.0.1;而A2若在自身POM中显式声明了2.0.1,会优先使用自身声明的版本,这就会导致两者的版本差异。
- 在A1目录执行
mvn help:effective-pom,对比父模块的dependencyManagement配置与A1自身的依赖声明,确认版本的最终来源。
4. 验证本地仓库缓存与镜像配置
- 删除本地仓库中
jakarta/json/jakarta.json-api目录下的所有版本文件,重新执行mvn install后再查看依赖树,排除本地缓存导致的版本错误。 - 检查
settings.xml中的镜像配置,确认是否有镜像源返回了错误版本的依赖包。
5. 核对Maven依赖调解规则的执行逻辑
Maven依赖调解遵循以下优先级:
- 依赖路径更短的版本优先;
- 路径长度相同时,POM中先声明的依赖版本优先。
- 在A1的
dependency:tree输出中,对比jakarta.json-api1.1.6和A2传递的2.0.1的依赖路径长度与声明顺序,确认是否是规则导致的版本选择差异。
内容的提问来源于stack exchange,提问作者Tiina
相关产品推荐
相关产品推荐

