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 人正在系统学习中


相关文章
|
1月前
|
Java 开发工具 Windows
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
Windows环境下面启动jar包,输出的日志出现乱码的解决办法
|
1月前
|
网络协议 Java Nacos
Nacos报错问题之jar 包启动就报错误如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
|
1月前
|
Java Shell Docker
Docker启动后怎样运行jar包文件
Docker启动后怎样运行jar包文件
|
25天前
|
Java Maven 微服务
springboot项目开启远程调试-jar包
springboot项目开启远程调试-jar包
19 0
|
15天前
|
Java Maven
SpringMVC常用Maven POM.xml依赖包片段
SpringMVC常用Maven POM.xml依赖包片段
|
25天前
|
Java Maven
maven项目导出可执行jar
maven项目导出可执行jar
28 0
|
26天前
|
Java Maven
maven手动安装jar
maven手动安装jar
21 2
|
29天前
|
XML Java Maven
深入探讨Maven打包:打造精致的Zip包
本文介绍了如何使用Maven将Spring Boot项目打包并部署。首先,利用Maven Assembly Plugin创建包含JAR的ZIP文件,以便于部署和修改配置文件。该插件允许自定义打包内容和格式。在`package.xml`中定义了打包格式、依赖、脚本和资源文件的规则。接着,在POM.xml中配置插件,排除配置文件和静态资源以保持外部。最后,执行`mvn package`命令生成分发包,简化了项目的部署流程。
92 2
|
30天前
|
Java Serverless 测试技术
Serverless 应用引擎常见问题之上传自定义jar包自动vpc启动报错如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
32 4
|
1月前
|
NoSQL Java 应用服务中间件
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包

推荐镜像

更多