1、問(wèn)題背景:
在dubbo啟動(dòng)的過(guò)程中報(bào)錯(cuò)誤:java.lang.ClassNotFoundException: javassist.ClassPath,調(diào)試發(fā)現(xiàn)代碼:Class<?> clazz = Class.forName(line, true, classLoader)執(zhí)行加載類(lèi)com.alibaba.dubbo.common.compiler.support.JavassistCompiler時(shí)報(bào):java.lang.NoClassDefFoundError: javassist/ClassPath,這個(gè)錯(cuò)誤最后被加工最終變成上邊的錯(cuò)誤??墒遣榭错?xiàng)目下發(fā)現(xiàn)依賴的包javassist-3.18.1-GA.jar命名存在,打開(kāi)這些jar包,其中的javassist.ClassPath的確存在啊,于是我換了個(gè)版本javassist-3.18.2-GA.jar程序跑起來(lái)了。那么到底是怎么回事呢?
2、出現(xiàn)原因:
其實(shí)就是因?yàn)?strong>JavassistCompile使用了類(lèi)javassist.ClassPath。經(jīng)過(guò)一點(diǎn)點(diǎn)的比較,最后發(fā)現(xiàn) javassist-3.18.1-GA.jar這個(gè)包是有問(wèn)題的,因?yàn)槠?strong>MAINFEST.FM文件是打不開(kāi)的,解壓以后也報(bào)各種Class文件格式錯(cuò)誤,看來(lái)應(yīng)該是這個(gè)問(wèn)題了,時(shí)間緊張也不打算深入驗(yàn)證了,總之當(dāng)大家出現(xiàn)這種問(wèn)題時(shí),也算是一種可能問(wèn)題吧,希望能為大家解決問(wèn)題提供線索。
3、解決方法:
引入相關(guān)pom依賴:
<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.15.0-GA</version>
</dependency>