Maven解决jar包版本冲突

简介: Maven解决jar包版本冲突

jar冲突原因:

jar包冲突主要是由于依赖传递导致的,不同的jar包依赖同一个不同版本的jar包,导致冲突。可以看下下图。

62.png



B和C都依赖D,但是不同的版本,所以在使用的过程中可能会出现问题。


依赖调解原则(内置解决方法)

maven冲突这是常有的事,所以maven本身提供了一些基本的解决办法,maven内置了三个基本的原则


原则一:最短路径优先


原则二:第一声明者优先


原则三:覆盖优先


下面的三张图,最终选择的都是高版本的jar包

63.png64.png65.png



这是maven自动做的依赖解决,也就是不需要做任何处理。


手动解决依赖冲突

先说两个方法,然后在说下怎么做


排除依赖:用于排除某项依赖的依赖jar包


版本锁定


排除依赖就是在依赖库中排除对应版本的jar包,断开依赖,在程序运行的时候会寻找其他的对应的版本API

66.png



版本锁定就是在pom中直接声明对应的jar包版本,maven就不会依赖其他的版本了,这个需要原理是基于groupId 和 artifactId 做定位。


maven插件

因为我使用的是idea,所以直接在插件库中搜索maven helper就可以了


file ->settings->plugins 打开插件的安装界面

67.png



安装完成之后就可以在pom 文件中看到

68.png


点击之后就可以看到冲突的jar包

69.png



实例解决

由上面的图可以看到


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,最终产生的代码就像上面

70.png



锁定版本

 <dependency>
            <artifactId>asm</artifactId>
            <groupId>org.ow2.asm</groupId>
            <version>7.1</version>
</dependency>

解决办法总结

内置:


原则一:最短路径优先


原则二:第一声明者优先


原则三:覆盖优先


手动:


排除依赖:用于排除某项依赖的依赖jar包


版本锁定


希望能对大家有所帮助,欢迎一键三连,谢谢。


文章知识点与官方知识档案匹配,可进一步学习相关知识

Java技能树Java概览Maven基础2902 人正在系统学习中


相关文章
|
存储 Java Maven
Maven系统级别依赖:解决部署时Jar包缺失问题
以上就是关于Maven系统级别依赖解决部署时Jar包缺失问题的解答,希望对你有所帮助。在软件开发中,遇到问题并解决问题是常态,希望你能够善用这些工具,解决你遇到的问题。
833 28
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
408 10
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
2893 3
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
【Azure Developer】com.azure:azure-identity jar包版本从1.2.0 升级到1.12.2 版本之后报错
在将 `com.azure:azure-identity` 的 jar 包版本从 1.2.0 升级到 1.12.2 后出现错误,错误信息表明存在方法未找到的问题。分析显示这是由于依赖管理错误导致,需要调整 classpath 确保使用兼容版本的依赖包。当前项目中 msal4j-1.11.0.jar 与 azure-identity-1.12.2 不兼容。
305 0
|
Java 测试技术 Maven
java依赖冲突解决问题之多个版本的jar包中都没有找到缺失的方法如何解决
java依赖冲突解决问题之多个版本的jar包中都没有找到缺失的方法如何解决

推荐镜像

更多