Maven解决jar包版本冲突
jar冲突原因:
jar包冲突主要是由于依赖传递导致的,不同的jar包依赖同一个不同版本的jar包,导致冲突。可以看下下图。
B和C都依赖D,但是不同的版本,所以在使用的过程中可能会出现问题。
依赖调解原则(内置解决方法)
maven冲突这是常有的事,所以maven本身提供了一些基本的解决办法,maven内置了三个基本的原则
原则一:最短路径优先
原则二:第一声明者优先
原则三:覆盖优先
下面的三张图,最终选择的都是高版本的jar包
这是maven自动做的依赖解决,也就是不需要做任何处理。
手动解决依赖冲突
先说两个方法,然后在说下怎么做
-
排除依赖:用于排除某项依赖的依赖jar包
-
版本锁定
排除依赖就是在依赖库中排除对应版本的jar包,断开依赖,在程序运行的时候会寻找其他的对应的版本API
版本锁定就是在pom中直接声明对应的jar包版本,maven就不会依赖其他的版本了,这个需要原理是基于groupId 和 artifactId 做定位。
maven插件
因为我使用的是idea,所以直接在插件库中搜索maven helper就可以了
file ->settings->plugins 打开插件的安装界面
安装完成之后就可以在pom 文件中看到
点击之后就可以看到冲突的jar包
实例解决
由上面的图可以看到
easyexcel 依赖的asm 是7.1
spring-cloud-starter-netflix-hystrix 依赖的asm 是5.0.4
在依赖的树上可以看到优先声明的是spring-cloud-starter-netflix-hystrix ,所以当前系统使用的版本是5.0.4,导致在调用easyexcel的时候报错
解决方案:
将easyExcel 声明在最前面
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
排除5.0.4 版本,注意 exclusions 的使用
手动写pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<exclusions>
<exclusion>
<artifactId>asm</artifactId>
<groupId>org.ow2.asm</groupId>
</exclusion>
</exclusions>
</dependency>
使用maven helper,在需要排除的版本右键,选择exclude,最终产生的代码就像上面
锁定版本
<dependency>
<artifactId>asm</artifactId>
<groupId>org.ow2.asm</groupId>
<version>7.1</version>
</dependency>
解决办法总结
内置:
-
原则一:最短路径优先
-
原则二:第一声明者优先
-
原则三:覆盖优先
手动:
-
排除依赖:用于排除某项依赖的依赖jar包
-
版本锁定
希望能对大家有所帮助,欢迎一键三连,谢谢。
相关文章
- Maven的一些技巧
- maven 下载jar失败: Missing artifact javax.jms:jms:jar:1.1
- Maven-项目管理(一)_认识Maven
- 【maven】IDEA:存在jar包,pom.xml文件没报错,但是Maven-Project-Dependencies有红线报错
- 关于Idea中右边的maven projects窗口找不到了如何调出来
- maven本地仓库已经有了所需的jar包,为什么还要去请求远程仓库
- maven 添加jar到中央/远程仓库
- 解决maven仓库有jar包但是maven程序无法下载仓库jar包
- maven多仓库配置(公司服务器与阿里云仓库)
- java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言
- Maven deploy部署jar到远程私服仓库
- maven添加本地非repository中的jar包
- Maven中&lt;dependencies&gt;节点和&lt;dependencyManagement&gt;节点的区别
- maven项目打包成可执行jar插件
- aven依赖分析,jar包冲突解决利器intellij idea插件Maven Helper强烈建议安装
- maven 添加本地jar包并打包
- maven setting.xml 配置(有效)
- maven 依赖jar包时版本冲突的解决:mvn dependency:tree -Dverbose
- 面试官:开发过Maven插件吗?我:开发过啊。。。
- 007-aven-assembly-plugin和maven-jar-plugin打包,java启动命令
- 使用Maven创建Java项目
- GitLabCICD发布jar包到基于nexus的私有maven源仓库
- Maven下载jar包时出错、Maven仓库中出现.lastUpdated结尾的文件问题及解决