运行 Java 应用程序时,JRE 版本必须与用于编译应用程序的 JDK 版本匹配或更高。
当尝试使用较低版本的 Java 运行高版本 JDK编译的应用程序时,就会抛出UnsupportedClassVersionError异常。
java.lang.UnsupportedClassVersionError: org/antlr/v4/Tool 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
在本文中,我们将介绍如何通过JDK工具检查class的 JDK 版本。
Java版本号与major version
Java 在类文件中使用两位数字定义主版本号(major version)。以下是 Java 版本与major version的对照表:
| JDK | major version |
|---|---|
| Java 1.1 | 45 |
| Java 1.2 | 46 |
| Java 1.3 | 47 |
| Java 1.4 | 48 |
| Java 5(1.5) | 49 |
| Java 6(1.6) | 50 |
| Java 7(1.7) | 51 |
| Java 8 | 52 |
| Java 9 | 53 |
| Java 10 | 54 |
| Java 11 | 55 |
javap 查看major version
JDK提供的工具javap可以获取一个类(.class)文件的各种详细信息,也包括class中定义的major version
下面是个简单的HelloWorld.java程序
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!!");
}
}
JDK编译后生成HelloWorld.class,就可以用javap查看生成的class中的major version
Linux:
javap -v HelloWorld.class | grep major
Windows:
javap -v HelloWorld.class | findstr major
如果你希望查看一个jar中的类的major version.
以 antlr-4.11.1-complete.jar 为例
Linux:
javap -v -cp /path/antlr-4.11.1-complete.jar org.antlr.v4.Tool | grep major
Windows:
javap -v -cp /path/antlr-4.11.1-complete.jar org.antlr.v4.Tool | findstr major
-cp 即-classpath, 指定查找类文件的位置
org.antlr.v4.Tool 即为antlr-4.11.1-complete.jar中的一个类的完整名称
本文解释了在运行Java应用时遇到UnsupportedClassVersionError的原因,即JDK版本不兼容。通过介绍如何使用javap检查类文件的majorversion,以及如何确保JDK与编译版本一致,帮助读者解决版本冲突。
2699

被折叠的 条评论
为什么被折叠?



