java.lang.NoClassDefFoundError异常处理

1.异常信息:

Caused by: java.lang.NoClassDefFoundError: com/pingan/cfss/monitor/user/controller/UserInfoController$2
at com.pingan.cfss.monitor.user.controller.UserInfoController.getUserList(UserInfoController.java:84) ~[cfss_monitor_user/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
at com.pingan.pafa.papp.esa.annotation.MethodESA.invokeMethod(MethodESA.java:148) ~[pafa5-dubbox-5.3.13.jar:?]
at com.pingan.pafa.papp.esa.annotation.MethodESA.perform(MethodESA.java:59) ~[pafa5-dubbox-5.3.13.jar:?]
... 36 more

2.通用的排查方法

遇到这种异常不外呼两种情况

1.classpath里没有对应的class文件

2.有class文件,但是加载静态类时,初始化静态方法报错。

3.问题解决过程

遇到后,猜想:我们生产环境肯定没人删除依赖包的怎么会少class文件,直接把1忽略了,又结合代码,2也被忽略了,此时就懵逼了(UserInfoController这个类已经被加载了,为啥UserInfoController$2会找不到?)。

当时就在本地想了一个办法,先把应用启动起来,然后把target全部删掉,发现报了一模一样的错误。(问题终于被确定,是1少class)

确定后就去生产服务器查看lib包,果然什么都没有,后来经过排查,是运维人员的定时备份日志脚本把lib也备份了(因为pafa的依赖包是放在和日志同目录的子目录里)

4.心得:

不要随随便忽略任何细节,除非你有确凿的证据

猜你喜欢

转载自www.cnblogs.com/z-test/p/10221919.html