.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