首页 > 其他分享 >maven高级21_maven的依赖冲突2

maven高级21_maven的依赖冲突2

时间:2024-03-15 16:26:25浏览次数:31  
标签:依赖 21 spring maven beans 冲突 版本 aop

一、什么是maven的依赖传递

 在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。

  

  

 通过上面的图可以看到,我们的web项目直接依赖了spring-webmvc,而spring-webmvc依赖了sping-aop、spring-beans等。最终的结果就是在我们的web项目中间接依赖了spring-aop、spring-beans等。

二、什么是依赖冲突

 由于依赖传递现象的存在, 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、第一声明者优先原则

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

  

  结论:通过上图可以看到,spring-aop和spring-webmvc都传递过来了spring-beans,但是因为spring-aop在前面,所以最终使用的spring-beans是由spring-aop传递过来的,而spring-webmvc传递过来的spring-beans则被忽略了。

 2、路径近者优先原则

  在 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。

六、版本锁定

 采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法在企业开发中经常使用。

 版本锁定的使用方式:

  第一步:在dependencyManagement标签中锁定依赖的版本

  第二步:在dependencies标签中声明需要导入的maven坐标

  ①在dependencyManagement标签中锁定依赖的版本

    

   注意:pom文件中使用dependencyManagement标签进行依赖jar的版本锁定,并不会真正将jar包导入到项目中,只是对这些jar的版本进行锁定。项目中使用哪些jar包,还需要在dependencies标签中进行声明。

  ②在dependencies标签中声明需要导入的maven坐标

   

   注意:由于前面已经在dependencyManagement标签中锁定了依赖jar包的版本,后面需要导入依赖时只需要指定groupId和artifactId,无须再指定version。

 

标签:依赖,21,spring,maven,beans,冲突,版本,aop
From: https://www.cnblogs.com/ajing2018/p/18075671

相关文章

  • Linux 安装IntelAx211无线网卡
    https://blog.csdn.net/shikaiaixuexi/article/details/131565396sudoaptinstallgitmakesudoaptinstallflexbisongitclonehttps://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.gitcdbackport-iwlwifisudomakedefconfig-iwlwifi-......
  • 代码随想录算法训练营第四十七天| ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家
    打家劫舍 题目链接:198.打家劫舍-力扣(LeetCode)思路:每一家的最大收益来源只有两个,一个是这家不偷,那么最大收益等于从上一家出来的最大收益,另一个是偷这一个家,因此最大收益等于从上上一家出来的最大收益加这一家的收益。classSolution{public:introb(vector<int>&nu......
  • SAP FI模块PA认证模拟题-中英文对译(C_TS4FI_2021最新版)
    NO.1/95AssetAccounting资产会计Whichofthefollowingarevalidsettlementreceiverswhenyouperformsettlementforanassetunderconstructiononalineitembasis?当您按行项目对在建资产进行结算时,以下哪项是有效的结算接收方?Note:Thereare2correct......
  • 代码随想录算法训练营第四十七天 | 337.打家劫舍III,213.打家劫舍II ,198.打家劫舍
     198.打家劫舍 已解答中等 相关标签相关企业 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一......
  • 21_迭代器模式
    迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不需要暴露集合对象的内部结构。迭代器模式将遍历操作封装在迭代器对象中,使得客户端可以通过迭代器对象依次访问集合中的元素。迭代器模式有三个主要角色:迭代器(Iterator):定义了访问和遍历集合对......
  • 稳定可靠:PW2163降压芯片,实现5V至3.3V/3V高效转换,3A电流稳定输出
    在现代电子设备中,电源管理芯片发挥着至关重要的作用。PW2163作为一款高效稳定的500kHz同步降压DC-DC转换器,凭借其出色的性能和广泛的应用领域,已成为众多电子设备中的电源管理新选择。 一、PW2163的显著特点与优势PW2163具有内部集成低RDS(ON)的主开关和同步开关,这一设计有助于最......
  • 授之以渔不是授之以鱼-docker maven 构建java工程
    原始的maven构建语句mvncleaninstall-Dmaven.test.skip=true现在需要在一台新的安装有docker的机子上构建,要求用jdk17和maven3.9,这台机子较旧,只有jdk8和jdk11,但是有安装docker,在不动构建机器现有软件的情况下构建。dockerrun\--rm\-v$(pwd):$(pwd)......
  • 常见问题解决 --- idea与maven使用常识
    1.拿到项目代码后先要知道使用了哪些技术和工具。比如使用的是idea、eclipse还是maven创建的项目,使用什么编程语言,使用什么项目目录结构等等2.如何用maven创建的项目必然有pom.xml,每次修改pom文件后必须重新加载。3.如果修改代码后还是报错,尝试使用clean清除编译缓存再同步maven......
  • Maven中optional标签详解(转)
    原文:https://blog.csdn.net/weixin_43888891/article/details/130510971作者:怪咖@来源:CSDN 一、前言<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version><optio......
  • 猫头虎分享已解决Bug || 服务版本冲突(Service Version Conflict):VersionMismatchError,
    博主猫头虎的技术世界......