Unsupported class file major version 61
这个报错 Unsupported class file major version 61 是 Java 开发中非常典型的版本不兼容问题。
它的核心含义是:你正在尝试运行的 .class 文件(或 Jar 包)是用 JDK 17(对应 class 文件主版本号 61)编译的,但你当前用来运行它的 Java 环境(JRE/JVM)版本低于 JDK 17(比如 JDK 11 或 JDK 8)。低版本的 Java 虚拟机无法识别高版本编译器生成的字节码,因此直接拒绝加载。
以下是详细的排查思路和解决方案:
🔍 第一步:确认环境版本差异
首先,你需要确认当前运行环境的 Java 版本。在命令行(终端/CMD)中输入以下命令:
bash
java -version
如果输出的版本号低于 17(例如显示 1.8.x 或 11.x.x),就完美印证了报错原因。
🛠️ 第二步:选择适合你的解决方案
根据你的实际场景,可以选择以下两种方案之一:
方案一:升级运行环境(强烈推荐)
如果你的项目或依赖库(比如 Spring Boot 3.x 强制要求 JDK 17+)必须使用高版本特性,最标准的做法是升级你电脑或服务器上的 Java 运行环境。
- 前往官网下载并安装 JDK 17 或更高版本(如 JDK 21)。
- 配置系统的环境变量
JAVA_HOME和PATH,确保指向新安装的 JDK 17。 - 如果你在使用 IntelliJ IDEA,还需要在
File -> Project Structure -> Project中,将SDK和Language level都切换为 17 或更高。
方案二:降低编译目标版本(向下兼容)
如果你必须在低版本(如 JDK 8)环境中运行程序,你需要用低版本重新编译你的代码。
- Maven 项目 :在
pom.xml中添加或修改以下配置,将编译目标降级(例如降到 8):
xml
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
- Gradle 项目 :在
build.gradle中配置:
groovy
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
- 命令行编译 :使用
javac --release 8 YourClass.java进行编译。
注意:如果你的代码或引入的第三方库用到了 JDK 17 独有的新语法或 API,方案二会导致编译失败或新的运行时错误。
📌 附:JDK 版本与 Class 文件版本号对照表
为了方便你以后快速排查,这里列出常见 JDK 版本与其对应的 class 文件主版本号(Major Version):
| JDK 版本 | Class 文件主版本号 |
|---|---|
| JDK 8 | 52 |
| JDK 11 | 55 |
| JDK 17 | 61 |
| JDK 21 | 65 |
建议优先检查你的 IDE 运行配置、Maven/Gradle 构建配置以及系统环境变量,确保"编译用的 JDK"和"运行用的 JRE"版本保持一致或运行环境版本更高。