需求
有时候我们生产是 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 |