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í)行加載類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
命名存在践瓷,打開這些jar包,其中的javassist.ClassPath
的確存在啊亡蓉,于是我換了個(gè)版本javassist-3.18.2-GA.jar
程序跑起來(lái)了晕翠。那么到底是怎么回事呢?
2砍濒、出現(xiàn)原因:
其實(shí)就是因?yàn)?strong>JavassistCompile使用了類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文件是打不開的樊卓,解壓以后也報(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>