1.结果:
存在多个版本spring依赖包,导致服务启动的过程中无法确定使用那个版本,pom.xml中进行指定对应的版本依赖包
2.情况说明:
(1).公司升级成spring cloud之后,此次版本迭代进行的是版本日常需求维护.并没有进行过多的框架层面的改动
(2)业务代码也是改动比较少,而且业务层面的改动,讲道理来说即使业务层面的改动,编译没有问题,启动过程中也不可能出现这个异常.
3.详细报错信息
Exception in thread “main” java.lang.NoClassDefFoundError:org/springframework/context/support/ClassPathXmlApplicationContext at XXXXXXXXXX(内部服务main方法)
Caused by:java.lang.ClassNotFundException:org/springframework/context/support/ClassPathXmlApplicationContext at java
.net.URLClassLoader
4.排查过程
(1).review了整个版本代码变更情况,经过代码排查确认无异常
(2).检查pom.xml,确认有部分依赖进行过变更
(3).问题分析ClassNotFundException出现,要么真的对应的依赖包找不到,要不就是找到多个
(4)控制台执行 mvn dependency:tree,查看对应的ClassPathXmlApplicationContext的版本,发现确实存在俩个不同的版本,应该是pom修改依赖然后带进来的,
5.处理
(1)由于spring的ClassPathXmlApplicationContext版本在spring cloud有对应的版本,需要指定正确的版本
(2).在项目pom中直接指定固定的对应的依赖版本,不受依赖的内部服务影响
(3).重新mvn dependency:tree 发现依然存在多个版本的依赖包,检查了一下各个子模块的pom,发现没有进行父pom声明,进行处理之后OK.
java.lang.NoClassDefoundError和java.lang.ClassNotFundException
最新推荐文章于 2024-12-16 08:16:10 发布