maven仲裁机制

maven仲裁机制

 

玩过springboot的人都知道  springboot项目中你一般看不到大段的spring相关包 而是像

spring-boot-start一个jar包就包含spring相关的包 包含了具体版本号 ,这其实就是一个版本仲裁的结果,不依赖程序自定义的相关包这样就不会造成JAR冲突

  当前maven大行其道,说到第一类Jar包冲突问题的产生原因,就不得不提maven的依赖机制了。传递性依赖是Maven2.0引入的新特性,让我们只需关注直接依赖的Jar包,对于间接依赖的Jar包,Maven会通过解析从远程仓库获取的依赖包的pom文件来隐式地将其引入,这为我们开发带来了极大的便利,但与此同时,也带来了常见的问题——版本冲突,即同一个Jar包出现了多个不同的版本,针对该问题Maven也有一套仲裁机制来决定最终选用哪个版本,但Maven的选择往往不一定是我们所期望的,这也是产生Jar包冲突最常见的原因之一。先来看下Maven的仲裁机制:

  • 优先按照依赖管理<dependencyManagement>元素中指定的版本声明进行仲裁,此时下面的两个原则都无效了
  • 若无版本声明,则按照“短路径优先”的原则(Maven2.0)进行仲裁,即选择依赖树中路径最短的版本
  • 若路径长度一致,则按照“第一声明优先”的原则进行仲裁,即选择POM中最先声明的版本

这里的问题就产生了  按照版本仲裁的原则  比如我需要引入一个jar包 我可能会引入一个较新版本的jar包  但原来三方包里已经有这个jar低版本包 且只支持低版本 高版本还不兼容 这时  按照仲裁原则就会有问题  三方包可能出现运行时异常等问题  所以起步依赖的引入 从根本解决了这个问题!

posted @   陶朱公Boy  阅读(2464)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示