maven 依赖优先级排查

Posted go大鸡腿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven 依赖优先级排查相关的知识,希望对你有一定的参考价值。

前言

在一次新项目搭建的时候,发现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覆盖声明,或者覆盖父类参数定义

以上是关于maven 依赖优先级排查的主要内容,如果未能解决你的问题,请参考以下文章

Maven依赖分析

maven 实战

浅谈Maven——管理jar包

Maven项目中的依赖出现版本冲突,最终发现是对Dependency Scope理解有误

Maven依赖冲突

maven依赖管理(依赖配置依赖传递依赖冲突依赖范围)