升级Jackson Databind至2.10.0后Weblogic启动报NoClassDefFoundError问题
Jackson升级后Weblogic启动报错排查与解决
问题背景
我负责的项目需要将com.fasterxml.jackson.core下的jackson-databind从2.9.10.4版本升级至2.10.0版本(这是满足漏洞修复要求的最低版本)。本地构建、Jenkins构建部署均正常,但重启Weblogic服务器时,某war包出现以下错误,该问题在升级前未出现。推测是升级后的Jackson核心库移除了相关类,需新增依赖,但未找到相关文档佐证。
错误日志
java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonProcessingException at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) at java.lang.Class.getDeclaredConstructors(Class.java:2020) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:231) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1004) Caused By: java.lang.ClassNotFoundException: org/codehaus/jackson/JsonProcessingException at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1029) at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:990) at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:101) at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:611) at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:543)
当前Jackson依赖配置
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.10.4</version> </dependency>
问题根源与解决方案
问题根源
org.codehaus.jackson.JsonProcessingException是旧版Jackson(codehaus包族)的核心类,而你升级的是新版Jackson(fasterxml包族)。升级后项目中仍有代码依赖旧版Jackson的类,导致Weblogic类加载时找不到对应的类文件。
解决步骤
替换代码中的旧版Jackson引用
全局搜索项目代码中的org.codehaus.jackson相关导入,替换为com.fasterxml.jackson对应的类:- 将
import org.codehaus.jackson.JsonProcessingException;替换为import com.fasterxml.jackson.core.JsonProcessingException; - 其他旧版类(如
ObjectMapper)也需同步替换为com.fasterxml.jackson.databind.ObjectMapper
- 将
临时兼容方案(无法批量修改代码时)
如果暂时无法修改所有代码,可添加旧版Jackson核心依赖,保证类能被正常加载:<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> <scope>provided</scope> <!-- 根据项目实际情况调整scope,避免版本冲突 --> </dependency>排查并解决依赖冲突
使用Maven命令查看项目依赖树,检查是否有其他依赖间接引入了旧版Jackson:mvn dependency:tree若发现冲突,可通过
<exclusions>标签排除不需要的旧版依赖:<dependency> <!-- 存在冲突的依赖 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者Jack Parker
相关产品推荐
相关产品推荐

