Maven解决jar包版本冲突

举报
红目香薰 发表于 2022/01/23 19:20:07 2022/01/23
【摘要】 ​jar冲突原因: jar包冲突主要是由于依赖传递导致的,不同的jar包依赖同一个不同版本的jar包,导致冲突。可以看下下图。​B和C都依赖D,但是不同的版本,所以在使用的过程中可能会出现问题。依赖调解原则(内置解决方法)maven冲突这是常有的事,所以maven本身提供了一些基本的解决办法,maven内置了三个基本的原则原则一:最短路径优先原则二:第一声明者优先原则三:覆盖优先下面的三张图...

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包

  • 版本锁定

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。