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

从Spring Boot 2.7.2升级到3.0.0-SNAPSHOT遇NoClassDefFoundError问题求助

问题原因

Spring Boot 3.0.0及以上版本基于Jakarta EE 9规范,彻底将原Java EE体系中的javax.*命名空间替换为jakarta.*,你的代码或依赖仍在引用旧的javax.servlet相关类,因此触发NoClassDefFoundError。

解决方法
  • 替换代码中的导入语句
    把所有import javax.servlet.*、import javax.servlet.http.*这类导入,统一替换为import jakarta.servlet.*、import jakarta.servlet.http.*。

  • 更新依赖适配Jakarta规范

    • 若直接引入了servlet-api依赖,替换为Jakarta版本:
      <!-- 旧依赖 -->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
          <scope>provided</scope>
      </dependency>
      <!-- 替换为 -->
      <dependency>
          <groupId>jakarta.servlet</groupId>
          <artifactId>jakarta.servlet-api</artifactId>
          <version>6.0.0</version>
          <scope>provided</scope>
      </dependency>
      
    • 确保Spring Boot父依赖版本为3.0.0及以上,它会自动管理所有Spring生态依赖的Jakarta适配版本:
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>3.0.0-SNAPSHOT</version>
          <relativePath/>
      </parent>
      
  • 检查第三方依赖兼容性
    确认项目中使用的第三方库(如持久层框架、工具类)是否支持Jakarta EE 9。若有依赖仍在使用javax.*命名空间,需升级到对应支持版本(例如Hibernate 6.x、MyBatis 3.5.10+等)。

  • 清理重建项目
    执行mvn clean install(Maven)或./gradlew clean build(Gradle),清理旧编译文件与依赖缓存,确保新依赖和代码生效。

内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:39:34