1、问题背景:
在dubbo启动的过程中报错误:java.lang.ClassNotFoundException: javassist.ClassPath
,调试发现代码:Class<?> clazz = Class.forName(line, true, classLoader)执行加载类com.alibaba.dubbo.common.compiler.support.JavassistCompiler
时报:java.lang.NoClassDefFoundError: javassist/ClassPath
,这个错误最后被加工最终变成上边的错误。可是查看项目下发现依赖的包javassist-3.18.1-GA.jar
命名存在,打开这些jar包,其中的javassist.ClassPath
的确存在啊,于是我换了个版本javassist-3.18.2-GA.jar
程序跑起来了。那么到底是怎么回事呢?
2、出现原因:
其实就是因为JavassistCompile使用了类javassist.ClassPath
。经过一点点的比较,最后发现 javassist-3.18.1-GA.jar
这个包是有问题的,因为其MAINFEST.FM文件是打不开的,解压以后也报各种Class文件格式错误,看来应该是这个问题了,时间紧张也不打算深入验证了,总之当大家出现这种问题时,也算是一种可能问题吧,希望能为大家解决问题提供线索。
3、解决方法:
引入相关pom依赖:
<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.15.0-GA</version>
</dependency>