需求

有时候我们生产是 Jdk7 的版本,但是很多框架都是使用的 jdk8+ 的包编译而成的。

我们知道 jdk8 编译的代码是无法运行在 jdk7 上的。

所以知道一个 jar 的具体编译版本很重要。

maven 查看

方法

直接查看 jar 包中的文件:MANIFEST.MF 文件,一般内容如下:

Manifest-Version: 1.0
Bnd-LastModified: 1381889304975
Build-Jdk: 1.7.0_25
Created-By: Apache Maven Bundle Plugin

其中 Build-Jdk 就是编译的 jdk 版本

准确性

这个有时候可能是不准确的。

以为是编译版本,不是打包版本。

我们可以使用 jdk8 打包出 jdk7 的版本。

那怎么办呢?

javap -verbose 方式

获得 class 文件

直接解压 jar 包,随便拷贝其中的一个 class 文件。

放在一个容易找的路径

使用 javap -verbose 命令

直接到对应的目录下。

javap -verbose xxx.class

信息大概如下:

  Last modified 2019-8-27; size 1933 bytes
  MD5 checksum e3e44724eafde0cd11c30660c8793c15
  Compiled from "User.java"
public class com.xxx.User
  minor version: 0
  major version: 51
  flags: ACC_PUBLIC, ACC_SUPER

其中 major version: 51 就是我们需要找的重要内容。

每一个大版本,都有唯一的 jdk 版本与其对应。

major version 与 jdk 的版本对应

jdk版本 major.minor version
1.1 45
1.2 46
1.3 47
1.4 48
1.5 49
1.6 50
1.7 51
1.8 52

参考资料