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

JDK22环境下GlassFish Jersey与Grizzly HttpServer依赖问题求助

解决JDK 22下Grizzly HttpServer启动时的NoSuchFieldError依赖冲突问题

问题根源

从错误栈和依赖树可以明确:Jersey组件版本不统一导致的字段缺失。
你在pom.xml的dependencyManagement中引入的Jersey BOM版本为3.0.2,但直接声明的3个Jersey核心依赖(容器、DI、JSON解析)却指定了3.1.7版本。Maven依赖解析时,BOM的低版本会覆盖部分核心组件(如jersey-common、jersey-server)的版本,最终出现3.0.2和3.1.7混合的依赖环境。

3.1.7版本的JacksonFeature会尝试访问MessageProperties.JSON_MAX_STRING_LENGTH字段,但这个字段是在Jersey 3.1+版本新增的,3.0.2的MessageProperties类中不存在该字段,因此抛出NoSuchFieldError。

解决方案

统一所有Jersey组件的版本,有两种可行方式:

方式1:通过BOM统一管理版本(推荐)

保留BOM的版本管理能力,移除直接依赖中的版本号,让BOM自动同步所有Jersey组件版本:

  1. 修改dependencies中的Jersey依赖,删除手动指定的version:
<!-- Grizzly 2 HTTP Server -->
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>

<!-- Jersey DI and core-->
<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
</dependency>

<!-- add jackson as json provider -->
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
</dependency>
  1. 修改properties中的jersey.version为你需要的统一版本(比如想要用3.1.7):
<jersey.version>3.1.7</jersey.version>

方式2:手动统一所有依赖版本

如果不想使用BOM,直接确保所有Jersey相关依赖的版本完全一致:
将properties中的jersey.version改为3.1.7,同时保持直接依赖的version与该变量一致,确保没有版本差异。

验证修改

执行以下步骤确认修复:

  1. 清理并重新构建项目:mvn clean install
  2. 运行mvn dependency:tree,检查所有org.glassfish.jersey开头的依赖版本是否完全统一,无混合版本情况
  3. 启动Main类,验证Grizzly HttpServer可正常启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:34:50