You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Jersey至2.40后触发ClassNotFoundException的根因咨询

问题根本原因解析

1. Jackson Databind的API不兼容变更

com.fasterxml.jackson.databind.AnnotationIntrospector$XmlExtensions这个内部类仅存在于Jackson Databind的旧版本(如2.10.x及更早)中。Jersey 2.40依赖的是较新版本的Jackson Databind(通常为2.15.x及以上),该版本已经移除或重构了这个类,不再保留原类的定义。

2. Maven依赖调解触发了不兼容的版本组合

  • 你的主项目同时引入了Jersey 2.40(附带新版Jackson)和旧版本的logstash-logback-encoder(依赖旧版Jackson)。
  • 按照Maven的依赖调解规则(路径最短优先,路径相同时以POM中声明顺序为准),最终类路径中生效的是Jersey引入的新版Jackson。
  • 项目启动时,旧版logstash-logback-encoder的初始化代码会尝试加载XmlExtensions类,但此时类路径里的新版Jackson已无此类,直接抛出ClassNotFoundException。

3. 小型项目未出问题的原因

小型项目依赖关系简单:要么没引入logstash-logback-encoder,要么使用的logstash版本刚好适配Jersey 2.40的Jackson版本,因此没有触发版本冲突导致的类缺失。

4. 更新logstash版本解决问题的逻辑

新版logstash-logback-encoder已经适配了Jackson的新版本,其代码不再依赖已被移除的XmlExtensions类,转而使用Jackson新版中对应的替代实现,因此启动时不会再出现类找不到的错误。

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:24:54