将Jersey从2.27升级至2.34时遭遇java.lang.NoSuchMethodError问题
Jersey 2.27升级至2.34版本触发
java.lang.NoSuchMethodError问题排查 问题概述
升级Jersey框架从2.27到2.34版本后,出现java.lang.NoSuchMethodError: org.glassfish.jersey.server.ApplicationHandler错误。
当前POM依赖版本片段
<xom_version>1.2.5</xom_version> <jersey_client_version>2.6</jersey_client_version> <javax_inject_version>2.2.0</javax_inject_version> <jaxrs_ri_version>2.6.0</jaxrs_ri_version> <joor_version>0.9.14</joor_version> <jersey_common_version>2.34</jersey_common_version> <gson_version>2.8.9</gson_version> <jersey_guava_version>2.6</jersey_guava_version> <hk2_api_version>2.2.0</hk2_api_version>
核心排查点
- 依赖版本不统一:仅升级
jersey_common到2.34,但jersey_client、jersey_guava仍停留在2.6,jaxrs_ri为2.6.0,这些低版本依赖与Jersey 2.34核心类存在方法签名不兼容问题,ApplicationHandler作为服务器核心类,旧版本依赖引用的方法可能已被2.34修改或移除。 - HK2版本不匹配:Jersey 2.34需要对应版本的HK2支持,当前
hk2_api用的2.2.0版本过低,HK2是Jersey的依赖注入容器,版本不兼容会导致核心组件初始化失败,触发方法找不到错误。 - 传递依赖冲突:用
mvn dependency:tree分析项目依赖树,排查是否有其他依赖引入了旧版Jersey/HK2包,覆盖了2.34版本的类,发现冲突后需排除旧版依赖。 - 类加载冲突:确认应用类加载器是否加载了多版本的
ApplicationHandler,比如容器自带旧版Jersey类与项目2.34版本冲突,需确保项目优先加载自身依赖包。
内容的提问来源于stack exchange,提问作者sai krishna
相关产品推荐
相关产品推荐

