maven 依赖优先级排查

1,244 阅读1分钟

前言

在一次新项目搭建的时候,发现mysql-connector-java版本不兼容,然后改了下版本,发现还是版本有问题,下面讲下修复过程

排查过程

  1. 由于父pom文件已经声明mysql-connector-java 5.1.41
  2. 那我在子pom 定义版本号 在这里插入图片描述 3.idea查看下jar引入情况 在这里插入图片描述 4.查看启动时,用到jar版本 在这里插入图片描述 5.这里就有点疑问,明明我已经改了版本号了,为啥还是用了父pom版本号?

背景

说下jar引入的关系 有个core项目,引入springboot契约,然后里面声明了版本号 在这里插入图片描述 然后子项目A,依赖core pom文件,按照继承关系mysql-connector-java也会引进来 介绍完项目结构,说下刚刚的场景,修改core项目版本号,发现A项目还是引入父契约的版本号。

修复

1.看下maven依赖树 在这里插入图片描述 A项目依赖core项目,但是拉下来是5.1.41版本 2.看下core依赖 在这里插入图片描述 3.core是正常的,A项目有问题 4.我们看下maven依赖优先等级 在这里插入图片描述 5.看到第三点:我们就明白什么原因了,A项目依赖core pom文件,然后父pom文件先声明,用声明的版本 除非说在A项目dependencies进行引用

解决方案

1.子pom dependencyManagement直接覆盖父pom文件dependencyManagement 在这里插入图片描述 2.覆盖父pom文件参数定义 在这里插入图片描述 在这里插入图片描述 3.在子项目dependencies修改版本号

总结:比较好的是在core项目dependencyManagement覆盖声明,或者覆盖父类参数定义