1. 程式人生 > >javassist 版本導致ClassNotFoundException: javassist.ClassPath異常

javassist 版本導致ClassNotFoundException: javassist.ClassPath異常

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>