java_查看jar包的JDK版本

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?


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(1559)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2018-08-31 C/C++/Java中的volatile关键字
2018-08-31 C++中的mutable关键字
2018-08-31 C++中的typedef typename 作用
点击右上角即可分享
微信分享提示