使用azure-core 1.20连接Azure KeyVault时JacksonAdapter解析异常
错误根因
你遇到的java.lang.VerifyError是Jackson组件版本不匹配导致:TokenStreamFactory是Jackson 2.10及以上版本才新增的类,你的环境中同时存在低版本2.9.9的jackson-core包和高版本2.12.5的jackson-databind包,低版本JsonFactory没有继承TokenStreamFactory父类,就会触发返回类型不匹配的错误。
2.9.9版本引入来源排查方向
Ivy报告中无相关记录的常见原因如下:
- 应用服务器自带依赖:你使用的Tomcat 9的
lib目录下可能预置了旧版本Jackson包,这类容器级别的依赖不属于Ivy管理的应用依赖范围,不会出现在Ivy报告中。 - 传递依赖引入未被捕获:
commons-configuration、struts这类老旧组件的传递依赖可能间接引入了低版本Jackson,没有显式锁定版本的情况下会被优先加载。 - 构建缓存残留:之前构建遗留的旧Jackson包还在构建输出目录或者Ivy本地缓存中,没有被清理干净。
解决方案
- 显式锁定Jackson全组件版本,在你的Ivy依赖配置最顶部加入如下配置,强制所有Jackson组件统一使用2.12.5版本:
<dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="2.12.5" conf="binaries->default" force="true"/> <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.12.5" conf="binaries->default" force="true"/> <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="2.12.5" conf="binaries->default" force="true"/>
- 检查Tomcat的
lib目录,删除目录内所有Jackson相关的Jar包,避免容器依赖优先级高于应用依赖。 - 清空Ivy本地缓存、项目构建输出目录,重新执行依赖拉取和构建操作,构建完成后检查输出包
WEB-INF/lib下的Jackson组件版本是否全部统一为2.12.5。 - 冲突仍存在的情况下,启动应用时添加JVM参数
-verbose:class,查看com.fasterxml.jackson.core.JsonFactory类的加载来源,直接定位旧版本Jar包的位置。
内容的提问来源于stack exchange,提问作者user1874435
相关产品推荐
相关产品推荐

