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

从JDK8迁移到JDK17后如何解决NoSuchFieldError:TOO_MANY_REQUESTS异常

解决JDK17迁移后java.lang.NoSuchFieldError: TOO_MANY_REQUESTS问题

问题根源

错误核心原因是Oracle OCI SDK的断路器组件尝试访问javax.ws.rs.core.Response.Status.TOO_MANY_REQUESTS字段,但当前类路径存在两种冲突情况:

  • 依赖的JAX-RS版本过低:TOO_MANY_REQUESTS字段是JAX-RS 2.1及以上版本才新增的
  • JDK17环境下混合了javax.ws.rs(旧Java EE)和jakarta.ws.rs(新Jakarta EE)依赖,导致类加载时找不到对应字段

解决方案

1. 统一JAX-RS依赖版本至Jakarta EE兼容版

JDK17推荐使用Jakarta EE 9+的JAX-RS依赖(包路径为jakarta.ws.rs),通过依赖管理锁定版本,避免OCI SDK间接引入旧的Java EE依赖:

<!-- Maven dependencyManagement示例 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.oci.sdk</groupId>
            <artifactId>oci-java-sdk-circuitbreaker</artifactId>
            <version>2.38.0</version> <!-- 选用支持Jakarta的最新OCI SDK版本 -->
            <exclusions>
                <exclusion>
                    <groupId>javax.ws.rs</groupId>
                    <artifactId>javax.ws.rs-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 移除旧Java EE依赖

直接删除项目中所有javax.ws.rs:javax.ws.rs-api相关依赖,替换为jakarta.ws.rs:jakarta.ws.rs-api。

3. 排查依赖冲突

用构建工具检查依赖树,确认没有同时存在javax.ws.rs-api和jakarta.ws.rs-api:

# Maven
mvn dependency:tree | grep -E "(javax.ws.rs|jakarta.ws.rs)"

# Gradle
./gradlew dependencies | grep -E "(javax.ws.rs|jakarta.ws.rs)"

若发现冲突,在对应依赖中手动排除旧的javax版本。

4. 升级OCI SDK至JDK17兼容版

确保使用的OCI SDK版本≥2.30.0(该版本开始支持Jakarta EE和JDK17),旧版本依赖的Java EE包在JDK17环境下会出现类加载问题。

验证

执行清理构建命令,重启应用:

# Maven
mvn clean install

# Gradle
./gradlew clean build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:36