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解决jar包版本冲突相关推荐

  1. Maven:解决jar包冲突和企业开发常用编写

    QUESTION:Maven:解决jar包冲突和企业开发常用编写 目录 QUESTION:Maven:解决jar包冲突和企业开发常用编写 ANSWER: 一:Maven的作用 二:解决jar包冲突: ...

  2. maven导入jar包时冲突的解决

    什么是依赖传递 先添加 springmvc 的核心依赖的坐标 <dependencies><dependency><groupId>org.springframew ...

  3. jarjar.jar解决jar包版本兼容问题

    最近在做一个给excel添加水印的需求,需要用到新版poi,但是老版本的poi不能丢弃,因为word转html的功能是基于老版的poi的,因此只能对更改新版本poi的的package,笔者使用的是通过 ...

  4. spring data redis的使用jar包版本冲突问题

    spring data redis 与spring 版本之间会有不兼容,要求spring 最低版本为4.2.6,这里推荐的一个版本 spring 4.3.2  spring data redis 1. ...

  5. was服务器里面jar包_如何在was中解决jar包冲突

    如何在 was 中解决 jar 包冲突 大型的基于 WebSphere 的项目开发中,同一个 WebSphere Application Server (以下 简称 WAS ) 上会部署多个应用程序, ...

  6. [Log4j基础]-- 缺少log4j包或包版本冲突报错

    1.如果运行程序出现错误:"Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/Lo ...

  7. Maven中jar包冲突的解决方式

    现象 创建一个maven工程,引入spring-context包. <dependency><groupId>org.springframework</groupId&g ...

  8. Maven中 jar包冲突原理与解决办法依赖传递

    Maven中 jar包冲突原理与解决办法&依赖传递 管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解 ...

  9. maven中如何解决jar包的依赖冲突Caused by:java.lang.NoSuchMethodError Caused by: java.lang.ClassNotFoundException

    产生jar包依赖冲突的原因: 假如在一个项目中,如项目demo中,我们即引入了aaa.jar又引入了bbb.jar,但是这两个jar包同时又引入了传递依赖xxx.jar,不同的是aaa.jar和bbb ...

最新文章

  1. 一觉醒来2T硬盘数据化为乌有,背后或是两名黑客在竞争式入侵
  2. python学习日记day2
  3. 一份厘清「数据指标」问题的清单
  4. 米匡框架实现量化交易炒股
  5. CF1422F Boring Queries(ST表 + 主席树)
  6. 欢迎使用Java 8之前要重温的10个JDK 7功能
  7. 【WP7】绘图与保存
  8. kNN算法__手写识别——基于Python和NumPy函数库
  9. 南京大学计算机专业考研难吗,计算机专业考研,除了南大和中山,还有哪些大学难度大性价比高...
  10. python 怕网页_如何像玩游戏一样学Python?
  11. python爬虫获取下一页_Python爬虫怎么获取下一页的URL和网页内容?
  12. 用深度学习给黑白照片上色
  13. wjw的剪纸(DFS)
  14. vs2010c语言一闪而过,[转载]关于vs2010运行C程序时,运行结果窗口一闪而过的问题...
  15. Android-跳转开启个人热点页面
  16. 万字拆解增长的算法:从产品、流量、品牌到文化
  17. 上网行为管理设备网关部署方式
  18. SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解
  19. c#连接西门子plc
  20. 通过response返回json数据到前端

热门文章

  1. 活动执行手册_1-200家门店,标准化不等于手册!而是标准+训练+督导,缺一不可!...
  2. ni软件可以卸载吗_黑科技 | 2020全新AI人工智能修图汉化版软件!这下可以放心卸载PS啦!...
  3. python数据库操作sqlite_Python操作mysql和sqlite
  4. 计算机专业要学几门课呀,计算机专业学生一定要学好这几门课!
  5. qt linux 聊天室,Qt网络聊天室客户端
  6. leetcode-14-最长公共前缀
  7. python 中的爬虫· scrapy框架 重要的组件的介绍
  8. 如何设置并使用 Synology NAS 共享的多功能打印机
  9. Mean Shift算法(CamShift)
  10. Jquery json的超强组合