报错场景:
在dubbo环境下的两个项目中A项目依赖B项目, B项目启动成功后启动A项目报错,
java.lang.IllegalStateException: Failed to introspect Class [com.zhishifenqi.boss.utils.rongdan.CommonUtil] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
// 中间报错日志没啥用 省略了
at com.zhishifenqi.LearnBorrowBossApiApplication.main(LearnBorrowBossApiApplication.java:25) [classes/:?]
Caused by: java.lang.NoClassDefFoundError: Lcom/zhishifenqi/boss/dao/yunshu/YSCapitalMapper;
错误分析:
首先看到 Failed to introspectClass[xxx.xxx.CommonUtil] 这种错误 基本上就是启动时CommonUtil找不到某个类,具体那个类会在报错日志下面打印出来如:
Caused by: java.lang.NoClassDefFoundError:
Lcom/zhishifenqi/boss/dao/yunshu/YSCapitalMapper;
如果通过代码看到这个类是存在的,就在去确认下打成jar包泛反编译中是否存在这个类, 但是我这里报错的类是B项目中的,因为是dubbo框架,A启动时也启动了B的依赖包,所以实际上是B的依赖包中的CommonUtil找不到注入的YSCapitalMapper类,所以我把B的依赖包去反编译,发现B依赖包打包时在pom.xml中的<build>标签中配置了打包忽略的类,其中就忽略了所有mapper相关的类,所以报错