如何查看jar包的jdk版本

本文介绍如何查看.jar包中的JDK版本信息。首先可以通过检查META-INFMANIFEST.MF文件中的Build-Jdk属性获取JDK版本,如果该属性不存在,则需要通过反编译.class文件并检查major version来确定编译时使用的JDK版本。

查看.jar包中的META-INF\MANIFEST.MF

用7-zip打开.jar包,查看META-INF\MANIFEST.MF中的内容,Build-Jdk属性就是JDK的版本,比如:

Build-Jdk: 1.5.0_22
 
  • 1
  • 1

说明其JDK版本为1.5.0.22。 
注意:一个.jar文件中,如果没有这个字段,就必须通过下面一种方法来查看

通过反编译.class文件来查看

解压.jar包,能得到.class文件。用JDK自带的javap反编译.class文件,用如下命令:

javap -verbose Configuration.class
 
  • 1
  • 1

查看得到的信息中,major version属性的内容,如下

major version: 52
 
  • 1
  • 1

说明这个.class文件是由JDK1.8编译得到的。

  • J2SE 6.0 = 50 (0x32 hex)
  • J2SE 5.0 = 49 (0x31 hex)
  • JDK 1.4 = 48 (0x30 hex)
  • JDK 1.3 = 47 (0x2F hex)
  • JDK 1.2 = 46 (0x2E hex)
  • JDK 1.1 = 45 (0x2D hex)

注意:一个.jar包中可能有多个.class文件,每个.class的JDK版本可能会不一样(编译器多个项目设置不同) 
这种方法的示例在这里

要确定某个 JAR 所使用的 JDK 版本,可以通过多种方法进行检查,具体取决于 JAR 的类型和其含的内容。以下是几种常见的方法: ### 方法一:使用 `javap` 查看类文件的版本 JAR 中的 `.class` 文件含了 Java 字节码,其版本号与编译时所使用的 JDK 版本相关。可以使用 `javap` 工具来查看类文件的版本信息。执行以下命令: ```bash javap -v <类文件路径> | grep "major version" ``` 例如: ```bash javap -v MyClass.class | grep "major version" ``` 输出的 `major version` 对应 JDK 版本如下: | Major Version | JDK Version | |---------------|-------------| | 45 | 1.1 | | 46 | 1.2 | | 47 | 1.3 | | 48 | 1.4 | | 49 | 5.0 | | 50 | 6.0 | | 51 | 7.0 | | 52 | 8.0 | | 53 | 9.0 | | 54 | 10.0 | | 55 | 11.0 | | 56 | 12.0 | | 57 | 13.0 | | 58 | 14.0 | | 59 | 15.0 | | 60 | 16.0 | | 61 | 17.0 | | 62 | 18.0 | | 63 | 19.0 | | 64 | 20.0 | | 65 | 21.0 | ### 方法二:查看 `MANIFEST.MF` 文件 JAR 的 `MANIFEST.MF` 文件中可能含编译时使用的 JDK 信息。解压 JAR 文件后,进入 `META-INF` 目录并查看 `MANIFEST.MF` 文件。部分构建工具(如 Maven 或 Gradle)可能会在该文件中添加 `Build-Jdk` 字段,例如: ```plaintext Build-Jdk: 17.0.3 ``` 如果该字段存在,则可以直接从中获取 JDK 版本。 ### 方法三:使用 `jarsigner` 查看签名信息(适用于签名 JAR) 对于签名的 JAR 文件,可以使用 `jarsigner` 工具查看其签名信息,其中可能含编译环境的 JDK 版本: ```bash jarsigner -verify -verbose <JAR文件路径> ``` 在输出中查找 `Timestamp` 或 `Signer` 信息,有时可以找到 JDK 版本相关的线索。 ### 方法四:使用第三方工具 可以使用一些第三方工具(如 [JD-GUI](http://java-decompiler.github.io/) 或 [CFR Decompiler](https://www.benf.org/other/cfr/))反编译 JAR ,并查看其生成的源码中是否含特定的 JDK 特性,例如 `var` 关键字(JDK 10 引入)或 `switch` 表达式(JDK 12 引入)。通过这些特性可以推断出大致的 JDK 版本。 ### 方法五:运行 JAR 文件并查看运行时版本 如果 JAR 文件是一个可执行文件,可以通过以下命令运行它,并查看运行时使用的 JDK 版本: ```bash java -version ``` 然后运行 JAR 文件: ```bash java -jar yourfile.jar ``` 注意,这种方法只能确认 JAR 文件是否兼容当前运行的 JDK 版本,不能直接确认其编译时使用的 JDK 版本。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值