.IncompatibleClassChangeError: Implementing class

1、问题截图

 

 

2、问题代码行

 

 

 

3、问题排查

a. 确定报错信息表达的含义

“IncompatibleClassChangeError”不兼容的类,从描述看就是找不到或者找到的类不匹配

 

上图是网上找到的相关问题解释 

b. 依据错误寻找解决方案

有了上述错误原因,可以指定排查方案。首先确认一下被加载类是不是真的存在,其次确认一下是不是真的加载错了包。

c. 实操过程

直接在Idea中查找类名,是存在的所以第一个问题不是原因;在jvm参数中加入了-verbose:class准备看下是不是包冲突了,但是由于还没有加载就报错了,所以console输出中也不能确定是否存在包冲突问题

d.网络中找类似案例

在google中查看大家遇到类似的问题,总结一下有两种情况。

1. 修改了某些jar包中的代码,打包后为V1.1,但是项目中还在使用V1.0。这个时候因为 静态类、静态方法等改动导致类不可用。

2.项目中依赖了很多包,存在包冲突,加载的时候因为没有找到合适的包而报错。

e. 解决问题

通过上述案例,我分析当前遇到了包冲突的情况。理论上只要解决好包冲突即可

解决包冲突手段:安装Maven Helper插件,就可以很轻松的找到冲突包。

 

 

进入包冲突界面发现有70多个包,其实我们并不需要解决所有的冲突,只需要找到和报错相关类即可。例如在我遇到的场景中就仅仅处理完thrift相关即可。

排查完重新打包测试过了。

最终定位原因:jar包冲突

4. 参考文档

a.https://www.homedt.net/111109.html

b.https://stackoverflow.com/questions/10474976/java-lang-incompatibleclasschangeerror-implementing-class-mongo

 

posted @ 2022-09-15 15:13  小祥工作室  阅读(1278)  评论(0编辑  收藏  举报