Maven依赖冲突的解决方式

Maven依赖冲突的解决方式

在这里插入图片描述

对Maven概念还不了解的能够看看个人这篇文章: https://blog.csdn.net/pjh88/article/details/108520721java

在讲依赖冲突以前咱们先来说讲什么是依赖传递

在maven中依赖是能够传递的,好比咱们有A,B,C三个项目,其中A依赖B,B依赖C,由递推可知A依赖Cweb

在这里插入图片描述

举例

好比咱们在web项目中导入spring-webmvc的jar包,即咱们的项目依赖了spring-webmvc,其实spring-webmvc还依赖其余jar包,好比sping-aop、spring-beans,因此咱们的web项目也间接依赖了sping-aop、spring-beans算法

在这里插入图片描述

什么是依赖冲突

这是因为依赖传递现象的存在spring

好比spring-webmvc 依赖 spirng-beans-4.2.4,而spring-aop 依赖 spring-beans-5.0.2,可是发现 spirng-beans-4.2.4 加入到了工程中,而咱们但愿 spring-beans-5.0.2 加入工程。这就形成了依赖冲突。网络

在这里插入图片描述

在咱们的开发中咱们固然啦不容许这种状况的出现,咱们要使用什么版本,他就必须使用什么版本数据结构

在这里插入图片描述

解决方案

  1. 使用maven提供的依赖调解原则
    第一声明者优先原则
    路径近者优先原则
  2. 排除依赖
  3. 锁定版本

1. 使用maven提供的依赖调解原则

第一声明者优先原则mvc

在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来肯定最终使用哪一个传递过来的依赖。maven

在这里插入图片描述

经过上图能够看到,spring-aop和spring-webmvc都传递过来了spring-beans,可是由于spring-aop在前面,因此最终使用的spring-beans是由spring-aop传递过来的,而spring-webmvc传递过来的spring-beans则被忽略了操作系统

路径近者优先原则.net

在 pom 文件定义依赖,以路径近者为准。
仍是上述状况,spring-aop 和 spring-webmvc 都会传递过来 spirng-beans,那若是直接把 spring-beans 的依赖直接写到 pom 文件中,那么项目就不会再使用其余依赖传递来的 spring-beans,由于本身直接在 pom 中定义 spring-beans要比其余依赖传递过来的路径要近

排除依赖

能够使用exclusions标签将传递过来的依赖排除出去

没有使用的时候
在这里插入图片描述使用以后

在这里插入图片描述

经过上图能够看到,spring-webmvc传递过来的4.2.4版本的spring-beans已经被排除出去了,项目中使用的为spring-aop传递过来的5.0.2版本的spring-beans。

版本锁定

使用dependencyManagement标签锁定依赖的版本

注意dependencyManagement中指定的仅仅是对应jar包的版本,并不会把指定的jar导入到项目中,要导入对应的jar包仍是要使用dependencies标签
在这里插入图片描述
在使用dependence标签的时候不须要再指定版本号了

在这里插入图片描述
在这里插入图片描述

以上就是Maven依赖冲突的解决方式,若有帮助还请点赞关注支持,若有疑问评论私信均可,看到后可帮助解答本博客主要侧重于数据结构于算法和java开发,操做系统,计算机网络,以为个人文章有帮助的小伙伴能够关注我,有疑问可评论私信,相逢便是缘,你们高处见

在这里插入图片描述