今天用tomcat在启动web项目过程中报错,Could not initialize class com.sun.proxy.具体日志如下
可以看到创建Listen的bean失败了,然后影响到服务启动。这个问题是运行时找不到类实例,如果单纯看这个日志估计真的很难查出来。网上也有一堆类似问题的,说依赖冲突,依赖缺失,静态方法实例化。这些都检查了一遍没有问题。最后解决方法还是去看最开始的启动日志,看注入的eppcMqSvcFacade这个bean为啥实例化失败了。于是找到了最开始的注入日志。
这么看就有点诡异了,都是属于同样的写法。为啥这个类没走JDK动态动理实例化结束。而是一行与众不同的日志。这个就不讨论了。但是在末尾发现它实例化不了是因为ErrorCodeException找不到。仔细去看EppcMQSvcFacade类发现没有引用此类,然后去找引入的子类中有没有引用这个类。果然还真找到了,最后把子类中的包引用改为本项目中的ErrorCideException就解决了此问题。
这个问题来看: 是因为A服务引用B服务的jar包。而B服务又引用了C服务的jar包。但在过程中A并没有对此进行C实例化管理。C服务中的类就没有被正确实例化,从而影响了B服务的注入。