怎么解决java.lang.NoClassDefFoundError错误
生产中遇到两次这个问题,我的解决方式是: 马上回滚, 然后懵逼😳,不知道从何入手
遇事不要慌,先说结论
通常是由于jar包冲突,升级了某些服务导致之前使用的类的jar包版本号发生了改变,导致报错的类所在的包的版本号发生变化
案发现场
java.lang.NoClassDefFoundError: Could not initialize class com.skysearch.cs.client.validator.ValidationUtil
at com.skysearch.cs.biz.service.eval.impl.EvalServiceImpl.addEvaluate(EvalServiceImpl.java:72)
at com.skysearch.cs.biz.service.eval.impl.EvalServiceImpl$\(FastClassBySpringCGLIB\)$a991df9a.invoke(:null)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
通过上面这个报错先找到使用的类 ValidationUtil
, 然后看其所在的项目,使用的包是什么版本
mvn dependency:tree
得到类似下图
搜索jar包关键字
拿到所在的版本如 上面是 6.2.3.Final
由于我的项目 A 依赖了 jar包 B, 上面这个是B的mvn分析, 同样分析下 A后,发现
A的版本高于B的版本,导致了问题。
那么通常想将两个版本保持一致,要么A降,要么B升
这里采用了升B的方式
实际后发现问题解决, Over
重要参考: https://blog.youkuaiyun.com/smartzzg/article/details/123257743
按照这个手动排除依然不行,mvn dependency:tree 依然存在,懵了
各种搜,找到一个命令 mvn clean install -U 执行了下,重试,成功了!
-U强制更新,清理了本地包的缓存,然后成功