包依赖导致的 ClassNotFoundException

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
2022-08-25 17:47:31.203 ERROR o.s.boot.SpringApplication.reportFailure:860 Application run failed
java.lang.TypeNotPresentException: Type com.dfire.soa.consumer.vo.DinningTableVo not present
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:1.8.0_292]
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na:1.8.0_292]
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:1.8.0_292]
at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) ~[na:1.8.0_292]
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[na:1.8.0_292]
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:1.8.0_292]
at sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository.java:68) ~[na:1.8.0_292]
at java.lang.reflect.Method.getGenericReturnType(Method.java:255) ~[na:1.8.0_292]
at org.apache.dubbo.common.utils.ReflectUtils.getReturnTypes(ReflectUtils.java:1196) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.rpc.model.MethodDescriptor.<init>(MethodDescriptor.java:48) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.rpc.model.ServiceDescriptor.initMethods(ServiceDescriptor.java:54) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.rpc.model.ServiceDescriptor.<init>(ServiceDescriptor.java:45) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.rpc.model.ServiceRepository.lambda$registerService$0(ServiceRepository.java:64) ~[dubbo-2.7.15.jar:2.7.15]
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1688) ~[na:1.8.0_292]
at org.apache.dubbo.rpc.model.ServiceRepository.registerService(ServiceRepository.java:63) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:321) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:314) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:238) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.bootstrap.DubboBootstrap.exportService(DubboBootstrap.java:1099) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.bootstrap.DubboBootstrap.lambda$exportServices$14(DubboBootstrap.java:1086) ~[dubbo-2.7.15.jar:2.7.15]
at java.util.HashMap$Values.forEach(HashMap.java:981) ~[na:1.8.0_292]
at org.apache.dubbo.config.bootstrap.DubboBootstrap.exportServices(DubboBootstrap.java:1070) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.bootstrap.DubboBootstrap.start(DubboBootstrap.java:886) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onContextRefreshedEvent(DubboBootstrapApplicationListener.java:70) ~[dubbo-2.7.15.jar:2.7.15]
at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onApplicationContextEvent(DubboBootstrapApplicationListener.java:63) ~[dubbo-2.7.15.jar:2.7.15]
at com.alibaba.spring.context.OnceApplicationContextEventListener.onApplicationEvent(OnceApplicationContextEventListener.java:52) ~[spring-context-support-1.0.11.jar:na]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.13.jar:5.3.13]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.13.jar:2.4.13]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) ~[spring-boot-2.4.13.jar:2.4.13]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) ~[spring-boot-2.4.13.jar:2.4.13]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) ~[spring-boot-2.4.13.jar:2.4.13]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) ~[spring-boot-2.4.13.jar:2.4.13]
at com.dfire.soa.SpringbootApplication.main(SpringbootApplication.java:21) [cash-platform-soa.jar:na]
Caused by: java.lang.ClassNotFoundException: com.dfire.soa.consumer.vo.DinningTableVo
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_292]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_292]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) ~[na:1.8.0_292]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_292]
at java.lang.Class.forName0(Native Method) ~[na:1.8.0_292]
at java.lang.Class.forName(Class.java:348) ~[na:1.8.0_292]
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:1.8.0_292]
... 38 common frames omitted

dubbo:2.7.15,spring-boot:2.4.13

今天遇到一个问题,本地启动项目没有问题,发布到测试环境提示 ClassNotFoundException。
报的错都是一些新加的 jar 包下的类,都是 SNAPSHOT 包。看起来像是找不到类导致 Spring 无法创建 bean,但是明明包里是有这个类的。
经过一天的修改发布观察,发现是 maven 依赖的问题,只要引用了多个相同的依赖包就会遇到这样的问题。比如 consumer 包,该项目直接引用了 consumer 包,还引用了一个包,那个包也引用了 consumer 包,导致 consumer 包出现了两次,如图。
image.png

按理来说只是包重复引用应该不会出现这样的问题,更何况版本都是一样的。所以目前原因暂不明,可能和快照包有关,也可能和 dubbo 等一系列包升级有关。