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

升级Java 8到Java 21及Spring Boot 3.2.5后调用apiClient.requestJWTUserToken出现ClassNotFoundException问题求助

升级Java 8到Java 21及Spring Boot 3.2.5后调用apiClient.requestJWTUserToken出现ClassNotFoundException问题求助

最近把项目从Java 8升级到Java 21,同时Spring Boot也升到了3.2.5,结果调用DocuSign的apiClient.requestJWTUserToken时碰到了头疼的报错,相信不少升级Jakarta EE栈的朋友都踩过类似的坑,我来分享下排查和解决的思路:

先把报错信息贴出来方便大家对照:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.NoClassDefFoundError: jakarta/ws/rs/core/GenericType] with root cause
java.lang.ClassNotFoundException: jakarta.ws.rs.core.GenericType
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]

问题根源分析

Spring Boot 3.x全面切换到了Jakarta EE规范(包前缀从javax改成jakarta),而Java 8时代用的是Java EE体系。你提到已经加了jakarta/ws/rs/core/GenericType相关依赖但还是报错,大概率是依赖版本不匹配、引入不完整,或者存在旧的javax版本依赖冲突。

具体解决步骤

  • 确保引入正确的Jakarta版本JAX-RS依赖
    不要随便找个依赖就加,要选和Spring Boot 3.2.x兼容的Jakarta REST API包,比如Maven中可以这么配置:

    <dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>3.1.0</version> <!-- 这个版本和Spring Boot 3.2.x适配性较好 -->
    </dependency>
    
  • 升级DocuSign SDK到Jakarta适配版本
    DocuSign的Java SDK是从特定版本开始支持Jakarta的,如果你的SDK版本还是旧的,内部可能依然依赖javax前缀的类,直接去Maven仓库找最新的支持Jakarta的SDK版本替换掉旧依赖即可。

  • 排查并排除依赖冲突
    很多第三方库可能还在间接引入旧的javax.ws.rs依赖,导致和Jakarta版本冲突。可以用Maven命令mvn dependency:tree或者Gradle命令gradle dependencies生成依赖树,找到冲突的旧依赖并排除,比如:

    <dependency>
        <groupId>xxx</groupId>
        <artifactId>xxx-third-party-lib</artifactId>
        <exclusions>
            <exclusion>
                <groupId>javax.ws.rs</groupId>
                <artifactId>javax.ws.rs-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 补充JAX-RS实现类(如果需要)
    有时候只引入API包还不够,DocuSign SDK可能需要具体的JAX-RS实现才能正常工作,比如RESTEasy或者Jersey。以RESTEasy为例,可以引入适配Spring Boot 3.x的starter:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-spring-boot-starter</artifactId>
        <version>6.2.7.Final</version>
    </dependency>
    

总结

核心思路就是确保整个项目的依赖完全从javax切换到jakarta,版本统一没有冲突。建议先从升级DocuSign SDK到最新适配版本入手,再逐步排查依赖问题。

备注:内容来源于stack exchange,提问作者Tech Div

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:08:09