当前位置: 首页 > 后端技术 > Java

Maven反复依赖不同版本选择规则

时间:2023-04-01 19:16:59 Java

Maven反复依赖于不同的版本选择规则。本文主要看maven内部对不同版本重复依赖jar的选择规则。很多时候我们在搭建环境的时候不注意,就会出现依赖冲突等问题。依赖冲突为什么maven选择的jar版本不是你想的?其实是有一定规律的。下面我们一起来看看吧。一、前言我们在使用maven的时候,或多或少遇到过jar包冲突的情况。一个jar包引入不同版本后,可能会导致NoSuchMethodError错误,那么你真的知道maven在多个版本jar时是如何选择版本的吗?如果你了解了这些,再加上一些依赖冲突的辅助工具,就可以让你更快速的解决这类问题2.重复依赖选择原则先抛出重复依赖再选择原则,后面一一验证最短路径原则:两层以上的不同层级依赖,选择最短路径语句优先级原则:两层对于上面提到的同层依赖,先声明覆盖,再声明同层依赖,先加载覆盖加载原理3.前期准备使用elasticsearch-rest-high-level-client和elasticsearch-rest-client创建web、service、公共模块配合演示4.最短路径原理最短路径原理的前提是有4.1common模块common模块引入elasticsearch-rest-high-level-client7.4.2,依赖elasticsearch-rest-client7.4.2commonpom:org.elasticsearch.clientelasticsearch-rest-high-level-client7??.4.24.2service模块service模块直接引入elasticsearch-rest-client6.8.13servicepom:org.elasticsearch.clientelasticsearch-rest-client6.8.134.3ideamaven分析工具打开idea的maven部分可以看到已经提示我们存在依赖冲突。其实在commonmodule下标明就是这个冲突没有用到。4.4mvndependency:tree可以通过mvndependency:tree查看项目的依赖树,可以看到最短路径原则生效,maven选择service模块的elasticsearch-rest-client:6.8短path.13Version5.声明优先原则声明优先原则:前提是同一层级有两层以上的依赖关系。第一个声明覆盖了声明,然后改变了上面的依赖结构。5.1通用模块让通用模块直接依赖elasticsearch-rest-client7.4.2org.elasticsearch.clientelasticsearch-rest-client7.4.25.2服务模块org.elasticsearch.clientelasticsearch-rest-client6.8.135.3验证web模块(commonbeforeservice)org.examplebackend_common1.0-SNAPSHOTorg.examplebackend_service1.0-SNAPSHOT记得重新打包模块mvncleaninstall由于依赖顺序common在服务之前选择commonincommon依赖5.4认证web模块(servicebeforecommon)org.examplebackend_service1.0-SNAPSHOTorg.examplebackend_common1.0-SNAPSHOT由于依赖记得重新打包模块mvncleaninstallorderservice在common之前选择了service中的依赖,已经完??成了优先级原则的验证。6.加载同级依赖后,先加载override,将依赖改为如下6.1web模块直接在webpom中引入两个版本的依赖6.2验证web模块(客户端7.4.2在客户端6.8.13之前)org.elasticsearch.clientelasticsearch-rest-client7??.4.2version>org.elasticsearch.clientelasticsearch-rest-client<版本>6.8.13记得重新打包模块mvncleaninstall6.3验证web模块(client6.8.13beforeclient7.4.2)org.elasticsearch.clientelasticsearch-rest-客户端6.8.13org.elasticsearch.clientelasticsearch-rest-client7.4.2记得重新打包模块mvncleaninstall7.ideapluginmavenhelper最后推荐一个插件mavenhelper,可以分析并快速解决idea中的maven依赖冲突。下面标记为6.8.13的依赖也表示maven当前选择的jar版本。这篇文章介绍的很详细,当maven中存在不同版本的重复依赖时,使用jar时,maven会选择几个jar规则,一一验证。你学会了吗?通常我们只是复制粘贴maven,但是当你遇到问题时,你需要快速解决问题的能力。快点!欢迎大家访问个人博客JohnnyHut欢迎关注我公众号