记一次NoClassDeffoundEror问题解决过程
背景:在对某台计算服务器进行代码修改后,发现es查询报错,抛出异常如下:
思路:
1.jar包冲突
查询了对应jar的pom文件,发现只有一个es的版本jar包,不存在冲突,百思不得其解。
2.本地环境问题
清理idea的缓存,发行问题仍然存在
最后翻阅资料,打了断点追踪异常抛出的地方,突然发现有抛出以下异常:
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.logging.log4j.util.LoaderUtil.getClassLoaders()[Ljava/lang/ClassLoader;
很明显log4j的jar包冲突了,然后去解决了log4j的冲突jar包,问题修复。
结论:在初始加载 SearchSourceBuilder 时,会先加载对应的类,而类在进行加载时会初始化静态变量,就包含了Logger的初始化,因为jar包冲突导致初始化失败,所以在后续执行对应的查询方法,初始化SearchSourceBuilder 时就会报错。