java_查看jar包的JDK版本

发布时间 2023-08-31 16:58:13作者: 夜行过客

Java: 查看jar包的JDK版本

今天突然发现新编译的jar包在AS跑不起来了,报错如下:

class file has wrong version 61., should be 55.0

image-20230831161551715

搜了下相关资料,发现是编译的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查看清单文件

    image-20230831162049041

  • 通过编译的class文件来查看文件信息

    image-20230831162114281

二. 通过十六进制

随便将报错的jar包解压,找到任意一个class文件:

image-20230831162306420

使用十六进制文本编辑器打开:

image-20230831164537150

找到主版本号(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

参考链接

  1. 查看jar包的JDK版本
  2. StackOverflow: List of Java class file format major version numbers?