javassist 版本導致ClassNotFoundException: javassist.ClassPath異常
阿新 • • 發佈:2019-02-05
1、異常描述
使用Dubbo時,引入了javassist導致出現了ClassNotFoundException: javassist.ClassPath異常,因為此異常網上資料較少,特分享出來供大家脫坑:
服務啟動後報錯:
message: Context initialization failed (o.s.web.context.ContextLoader:350) [localhost-startStop-1] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.wesd.hrhx.service.dubbo.DebtDubboService': Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError.
2、異常定位
從錯誤資訊中可看出,錯誤來源於Spring注入DebtDubboService出錯,我們繼續往下找具體的原因:
Caused by: java.lang.NoClassDefFoundError: javassist/ClassPath
at java.lang.Class.forName0(Native Method)
仔細分析下Spring的Ioc原理即知:Spring使用類載入器載入類時,找不到javassist/ClassPath。
3、異常處理
可是檢視專案下發現依賴的包javassist-3.18.1-GA.jar,開啟這些jar包,其中的javassist.ClassPath的確存在啊,於是我換了個版本javassist-3.18.2-GA.jar程式跑起來了。
其實就是因為JavassistCompile使用了類javassist.ClassPath。經過一點點的比較,最後發現 javassist-3.18.1-GA.jar這個包是有問題的,因為其MAINFEST.FM檔案是打不開的,解壓以後也報各種Class檔案格式錯誤。
解決方案:
更換javassist版本:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>