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.心得:

不要隨隨便忽略任何細節,除非你有確鑿的證據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM