Skip to content

Spring 类文件版本错误(61.0 vs 55.0)解决方案

问题原因

错误信息 class file has wrong version 61.0, should be 55.0 表示当前项目存在 Java版本不兼容问题

  • 61.0:对应 Java 17(Java 17 的 class 文件版本号)
  • 55.0:对应 Java 11(Java 11 的 class 文件版本号)

核心问题是:你的项目使用的是 Java 11,但依赖的 Spring 库是为 Java 17 编译的版本

根据 Spring 官方文档:

"从 Spring Framework 6.0 开始,Spring 要求 Java 17+ 环境"
"Spring Boot 3 基于 Spring Framework 6,同样需要 Java 17+"

这意味着:

  1. 当使用 Spring 6/Boot 3 时,必须使用 Java 17+
  2. 当使用 Java 11 时,必须使用 Spring 5.3.x 或 Spring Boot 2.7.x

解决方案

方案一:升级至 Java 17(推荐)

长期推荐方案,保持技术栈更新

步骤

  1. 安装 JDK 17

  2. 在 IntelliJ 中配置 JDK 17

    text
    File → Project Structure → Project
    • 设置 Project SDK 为 Java 17
    • 设置 Project language level 为 17

    设置项目SDK

  3. 配置环境变量

    • 终端中检查 Java 版本:
      bash
      java --version
    • 如果不是 Java 17,设置 JAVA_HOME
      bash
      # 示例路径(实际路径替换为你的 JDK 17 安装路径)
      export JAVA_HOME="/path/to/jdk-17"
    • 验证环境变量:
      bash
      echo $JAVA_HOME
  4. 更新 Maven 配置(pom.xml)

    xml
    <properties>
        <java.version>17</java.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
  5. 重新构建项目

    • 执行 Maven Clean 和 Package 命令
    • 在 IntelliJ 中执行 Invalidate Caches (File → Invalidate Caches)

方案二:降级 Spring Boot 到 2.7.x

适用于必须使用 Java 11 的项目

步骤

  1. 修改 pom.xml 中的父 POM 版本

    xml
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.17</version> <!-- 使用最新 2.7.x 版本 -->
    </parent>
  2. 检查并移除 Spring 依赖的显式版本

    xml
    <!-- 错误示例(显式声明不兼容版本) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>3.1.0</version> <!-- 删掉这行 -->
    </dependency>
    
    <!-- 正确示例 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  3. 确保其他 Spring 依赖与 Boot 2.7 兼容

    xml
    <!-- 示例:Spring Beans 兼容版本 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.29</version> <!-- Spring Boot 2.7.x 自动管理 -->
    </dependency>
  4. 重建 Maven 依赖

    • 删除本地 Maven 缓存:
      • 定位 ~/.m2/repository 文件夹
      • 删除整个 /repository/org/springframework 目录
    • 在 IntelliJ 中:右键项目 → Maven → Reload Project
    • 或使用终端命令:
      bash
      mvn clean install -U

修复 Gradle 项目(如果适用)

  1. 设置 Gradle JVM

    text
    Preferences → Build,Execution,Deployment → Build Tools → Gradle
    • 设置 Gradle JVM 为 Java 17

    设置Gradle JVM

  2. 配置 Java 工具链

    groovy
    // build.gradle
    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }

常见错误排查

环境不一致

即使 IDE 设置了 Java 17,Maven/Gradle 命令行仍有报错:

  • 检查终端环境变量: echo $JAVA_HOME
  • Maven 编译目标设置:在 pom.xml 确认 <maven.compiler.target>正确设置

Spring Boot 3 新项目注意

IntelliJ 新建 Spring Boot 项目默认使用 Spring Boot 3(需 Java 17):

  • 如需 Java 11 支持,使用 start.spring.io 明确选择 Spring Boot 2.7 + Java 11

版本兼容对照表

Java版本支持的最高Spring版本Spring Boot版本
Java 17Spring 6.x+Boot 3.x+
Java 11Spring 5.3.xBoot 2.7.x
Java 8Spring 5.3.xBoot 2.7.x

总结

核心解决思路是统一 Java 环境和 Spring 版本的匹配关系

  1. 升级 Java → 使用 Spring 6/Boot 3
  2. 降级 Spring → 兼容 Java 11 环境

重要提示:Spring Boot 2.7 已于2023年11月结束官方维护,建议尽快迁移到 Java 17 + Spring Boot 3。