jar包冲突那些事,编译器不报错,启动报错

      上周启动项目遇到了错误一,这周启动遇到错误二。

      在分布式系统中,那么多复杂繁琐的jar依赖,遇到jar包冲突是常有的事。

      假如,你也经常遇到这样的情况——明明编译的时候是好好的,可就是启动的时候不成功,明明jar包是有的,可就是报找不到类,或找不到方法?

      为了解决这样的困扰,遂写下此文,顺便聊一聊。

错误一:java.lang.NoClassDefFoundError:redis/clients/jedis/GeoUnit

错误二:java.lang.NoSuchMethodError: org.springframework.http.HttpMethod.matches


问题再述:明明jar包还在,却报找不到方法or类 ?

上面就根据错误一和错误二,分析下这些天遇到这两个典型的由于jar包冲突导致启动报错的问题。

错误一: java.lang.NoClassDefFoundError:redis/clients/jedis/GeoUnit
启动时报如上错误,乍一看,看到NoClass,还以为是缺包呢,或者包内容更改了,但是maven打包时用了旧包。可是idea或者eclipse编译的时候又没报错,况且这是jedis的类,没人会闲得无聊去修改jedis的内容吧。

这时候就在idea或者eclipse编辑框,搜索报错的类,点击去,查看类所在的包,记录下包版本号,注意看左上角。


得知ide编辑器使用的类所在版本包之后,打开启动报错的war包,如果是用spring-boot打的则是 jar包,把包解开,查看lib目录下,都有哪些jar包,找到jedis包,猛然发现,jedis包被打包的居然是2.7.3版本的。再把2.7.3用反编译工具查看,jedis包2.7.3版本里面确实没有该类,而2.8.0版本的jedis jar包中,该类是存在的。问题找到了,利用maven排出jar包功能,把低版本的jedis排出,同时显示制定jedis高版本jar包。问题解决。


错误二: java.lang.NoSuchMethodError: org.springframework.http.HttpMethod.matches
用同样的方法,发现启动报错的包里,lib目录下,其他spring 包都是4.2.3版本,唯独spring-webmvc这个包是4.2.4版本,查看源码,HttpMethod这个类在spring-web这个jar包下,从maven下载4.2.3版本和4.2.4版本的spring-web包,利用反编译查看源码,发现,4.2.3版本里的HttpMethod确实没有matches方法,而4.2.4版本包里却有。问题找到了,之所以报错是因为4.2.4版本的spring-webmvc这个jar包用到了matches方法。所以把版本更改一致就解决了。

ClassNotFoundException
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长乐smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值