如何修复 java.lang.UnsupportedClassVersionError: Unsupported major.minor version 错误?
java.lang.UnsupportedClassVersionError: Unsupported major.minor version 是一个运行时错误,通常在尝试运行编译后的 Java 类文件时出现。它表示你正在尝试在一个较低版本的 Java 运行时环境(JRE)中运行由较高版本的 Java 编译器生成的类文件。
java.lang.UnsupportedClassVersionError: Unsupported major.minor version
每个 Java 版本都有自己的 class 文件版本号,也称为 major/minor version。当你用较新的 Java 版本(例如 Java 17)编译代码,然后尝试在较旧的 Java 运行时(例如 Java 8)中运行该代码时,JVM(Java 虚拟机)无法识别该 class 文件的版本,进而抛出 UnsupportedClassVersionError 错误。
UnsupportedClassVersionError
例如,以下情况会导致该错误:
以下是常见 Java 版本与其 class 文件的版本号对应关系:
例如,如果错误消息显示 Unsupported major.minor version 55.0,则意味着你尝试用 Java 8 或更低版本的运行时来运行 Java 11 编译的代码。
Unsupported major.minor version 55.0
要修复这个错误,主要有两种解决方案:
如果你编译代码时使用了较高版本的 Java(例如 Java 11 或 17),则需要确保你的运行环境使用相同或更高版本的 JRE。
步骤:下载并安装正确版本的 Java JRE 或 JDK,确保它与你编译代码时的 Java 版本一致。
检查当前 Java 版本:你可以通过命令行运行以下命令来查看当前安装的 Java 版本:
bash java -version
示例输出:
java version "11.0.2" 2019-01-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
如果版本低于你编译代码所用的版本,则需要升级到正确的版本。
如果你希望编译后的代码能够在较旧版本的 Java 运行时上运行,则可以在编译时使用 javac 的 -target 和 -source 选项指定兼容的 Java 版本。
javac
-target
-source
例如,如果你希望用 Java 11 编译代码,但目标运行时是 Java 8,你可以这样编译:
javac -source 1.8 -target 1.8 MyClass.java
这样会确保生成的 MyClass.class 文件可以在 Java 8 的环境下运行。
MyClass.class
另外,还需要确保你有相应的 JDK 版本可供编译,尤其是在使用 Java 9 或更高版本的模块系统时。
假设你有以下 Java 类:
public class Example { public static void main(String[] args) { System.out.println("Hello, Java!"); } }
bash javac Example.java
然后尝试在 Java 8 的 JRE 环境中运行它:
bash java Example
你可能会遇到如下错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Example has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
修复方法:
方法 1:升级你的 Java 运行时环境到 Java 11 或更新版本。
bash javac -source 1.8 -target 1.8 Example.java
这样,你编译的 Example.class 文件将能够在 Java 8 环境中正常运行。
Example.class