1 背景
代码和包依赖等信息没做任何修改,之前项目启动没问题的,有一天项目在测试环境突然启动报错
了,生产环境可以正常启动。报错信息如下所示。
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.web.server.WebServerFactoryCustomizer at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
2 原因分析和问题解决
可能原因是该项目部署时加载到的间接依赖包有变化导致的。
通过对比测试环境和生产环境项目的安装包里面加载的依赖包,找到差异。如果测试环境多出了一
些包,则排除测试环境多余的包即可(依次排除多余的包,直到项目正常启动为止)。
具体步骤为:
(1)下载测试环境和生产环境的项目安装包(jar包等);
(2)直接解压安装包,对比 解压文件中“\BOOT-INF\lib” 里的依赖包的差异;
(3)在idea添加 "Maven Helper"插件,通过该插件快速找到测试环境多出的包所在的项目直接依
赖包位置,并在直接依赖包中排除此多出的包。
3 扩展
在项目中引入其他包时,尽量使用 <exclusions> 排除间接依赖其他的包,以免后续出现包冲突或
其他异常问题。