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

Spring Boot 2.7升级Jakarta Annotations API 2.1.1后遇NoClassDefFoundError如何解决?

问题解决办法

原因分析

Spring Boot 2.7版本仍基于javax命名空间构建,而你升级的jakarta.annotations-api:2.1.1已经完全迁移到jakarta命名空间,原javax.security.RunAs类已被重命名为jakarta.security.RunAs,导致应用启动时找不到旧的javax类,抛出NoClassDefFoundError。

具体解决方案

  • 回退注解API版本:将jakarta.annotations-api降级到1.x系列(该版本兼容javax命名空间,与Spring Boot 2.7适配)。

    • Maven项目修改pom.xml:
      <dependency>
          <groupId>jakarta.annotation</groupId>
          <artifactId>jakarta.annotation-api</artifactId>
          <version>1.3.5</version>
      </dependency>
      
    • Gradle项目修改build.gradle:
      implementation 'jakarta.annotation:jakarta.annotation-api:1.3.5'
      
  • 排查依赖冲突:如果项目中其他依赖强制引入了jakarta.annotations-api 2.x版本,需要用依赖分析工具定位并排除:

    • Maven执行命令:mvn dependency:tree,找到冲突的依赖节点,通过<exclusions>排除高版本:
      <dependency>
          <!-- 存在冲突的依赖 -->
          <groupId>xxx</groupId>
          <artifactId>xxx</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>jakarta.annotation</groupId>
                  <artifactId>jakarta.annotation-api</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      
    • Gradle执行命令:./gradlew dependencies,找到冲突依赖后添加exclude:
      implementation('xxx:xxx') {
          exclude group: 'jakarta.annotation', module: 'jakarta.annotation-api'
      }
      
  • 长期方案(可选):如果业务允许,考虑升级到Spring Boot 3.x版本,该版本全面支持Jakarta EE 9+规范,可直接使用jakarta.annotations-api 2.x及以上版本,但升级需要将项目中所有javax相关类替换为jakarta命名空间,改动范围较大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:58:10