jar包冲突原因分析

本文探讨了Java开发中常见的jar包冲突问题,包括同一项目内不同版本引起的冲突和不同项目间的类重复。通过分析maven的依赖原则和类加载机制,特别是双亲委派模式,展示了冲突的原因。解决方案涉及到了maven-shade-plugin的使用,以及针对guava和servlet-api冲突的处理策略。此外,还提到了IDEA项目打包和Tomcat类加载的影响。
摘要由CSDN通过智能技术生成

jar包冲突原因

前段时间,因为经历了项目重构,引入很多包,加上管理不善,出现了很多jar包冲突问题。当时项目想用spring管理hbase实例,引入了org.springframework.data,spring-data-hadoop,2.5.0.RELEASE jar包,出现了guava包的冲突,tomcat对servlet-api加载冲突问题。在最近的开发中也遇到了curator-client包冲突问题。借着这次机会,顺便学习写博客。
其实在java开发中,jar hell是一个很常见的问题,主要是因为jvm在加载的过程中,项目的加载的顺序问题。同一个类(全限定名相同)在jvm中只会加载一次,这里面涉及到类加载和maven依赖管理的知识点。当然,maven已经给我们提供了很多解决的方法。

冲突原因
造成jar包冲突的原因主要有两种
1. 第一种是一个项目,依赖了同一个项目的两个版本。
2. 第二种冲突原因是不同项目中,出现了相同的类。何为相同的类,即类的全限定名相同。
一般的错误有:

找不到方法:java.lang.NoSuchMethodError

找不到类:Exception in thread "main" java.lang.NoClassDefFoundError

找不到变量:Exception in thread "main" java.lang.NoSuchFieldError


项目工程
  • 引入5个项目工程做说明:分别为leaf-verb-a(简称a),leaf-verb-b(简称b),leaf-verb-c(简称c),leaf-verb-d(简称d),leaf-verb-e(简称e)
同一个项目中,版本不同造成
项目关系
leaf-verb-a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值