java_查看jar包的JDK版本
Java: 查看jar包的JDK版本
今天突然发现新编译的jar包在AS跑不起来了,报错如下:
class file has wrong version 61., should be 55.0
搜了下相关资料,发现是编译的JDK版本过高导致的,
其实就是在Gradle file 中修改了这两行code 所致:
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
这样的话,会使用JDK17
去编译jar包。所以只需要把上面的Java Version 修改为比编译的版本低就行了,比如上述报错的编译环境是JDK11
(class file version: 55)。
查看编译的jar包的JDK version可以通过下列途径:
一. 通过版本
通常在使用Java程序时,需要对JDK版本进行核对,JDK构建版本不等于执行的运行版本,需要通过执行类来辨别
-
通过反编译工具jd-gui查看清单文件
-
通过编译的class文件来查看文件信息
二. 通过十六进制
随便将报错的jar包解压,找到任意一个class文件:
使用十六进制文本编辑器打开:
找到主版本号(major version)的显示位置,可以看到显示的是 00 3D
, 换算成十进制就是 61
, 也就是说,该class file 是通过java17 编译生成的。
Tips: minor version 与 major version 都是以大端格式进行存储的。
三. Java各版本的major version
下表是java各版本的major version:
Java | Major version |
---|---|
20 | 64 |
19 | 63 |
18 | 62 |
17 | 61 |
16 | 60 |
15 | 59 |
14 | 58 |
13 | 57 |
12 | 56 |
11 | 55 |
10 | 54 |
9 | 53 |
8 | 52 |
7 | 51 |
6 | 50 |
5 | 49 |
1.4 | 48 |
1.3 | 47 |
1.2 | 46 |
1.1 | 45 |
1.0.2 | 45 |
参考链接
- 查看jar包的JDK版本
- StackOverflow: List of Java class file format major version numbers?