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

升级JDK17与SpringBoot3.2.4后启动报NoClassDefFoundError求解决方案

问题分析与解决方案

错误根源

Spring Boot 3.2.x 基于 Jakarta EE 9+,原Java EE体系下的javax.*包已全面迁移至jakarta.*命名空间。报错的javax.ws.rs.ext.MessageBodyWriter是旧版JAX-RS API类,当前环境仅兼容jakarta.ws.rs.ext.MessageBodyWriter。

你的依赖中,io.swagger:swagger-jersey2-jaxrs:1.6.14是核心冲突点:这个Swagger 1.x版本完全依赖Java EE的javax.ws.rs栈,无法适配Jakarta EE环境,导致Jersey配置Bean初始化失败。

解决步骤

1. 替换旧Swagger依赖

删除旧的Swagger依赖:

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jersey2-jaxrs</artifactId>
    <version>1.6.14</version>
</dependency>

替换为支持Jakarta EE的OpenAPI 3.x组件(Swagger已升级为OpenAPI规范):

<!-- OpenAPI JAX-RS 2 Jakarta 兼容包 -->
<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-jaxrs2-jakarta</artifactId>
    <version>2.2.20</version>
</dependency>
<!-- OpenAPI UI Jakarta 兼容包(如需UI支持) -->
<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-ui-jakarta</artifactId>
    <version>2.2.20</version>
</dependency>

2. 清理残留javax依赖

检查项目其他依赖,确保所有JAX-RS、Servlet、JPA相关组件都使用jakarta.*命名空间版本:

  • 你已配置的jakarta.persistence:jakarta.persistence-api、jakarta.servlet:jakarta.servlet-api是正确的
  • Spring Boot管理的spring-boot-starter-jersey会自动适配Jakarta环境,无需额外调整

3. 重建并启动

执行Maven清理构建:

mvn clean install

重启应用后,jerseyConfig的初始化错误即可解决。

补充提示

  • 所有Spring Boot 3.x的依赖必须支持Jakarta EE 9+,若有其他未迁移的第三方组件,需寻找兼容版本或替代方案
  • 自定义JAX-RS代码需将import javax.ws.rs.*全部替换为import jakarta.ws.rs.*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:22:03