> 文章列表 > 【java】查看 Jar 包打包时的JDK版本

【java】查看 Jar 包打包时的JDK版本

【java】查看 Jar 包打包时的JDK版本

需求

查看 Jar 包编译时的JDK 版本

解决方案(一)

在 Java 中,jar 包是一种常用的打包和分发 Java 类的格式。如果你想查看一个 jar 包是使用哪个 JDK 版本编译的,可以执行以下步骤:

  1. 解压 jar 包。可以使用命令行工具或者压缩软件解压 jar 包到某个文件夹中。

  2. 在解压的文件夹中找到 META-INF/MANIFEST.MF 文件,这个文件包含了关于 jar 包的元数据信息。

  3. 在 MANIFEST.MF 文件中查找 “Created-By” 属性。这个属性包含了编译 jar 包的 JDK 版本。

例如,假设你有一个名为 mylibrary.jar 的 jar 包,并且你已经将它解压到了 /path/to/mylibrary 文件夹中。你可以在命令行中使用以下命令来查看编译版本:

$ cat /path/to/mylibrary/META-INF/MANIFEST.MF | grep Created-By

这将在控制台输出类似以下的信息:

Created-By: 1.8.0_181 (Oracle Corporation)

这意味着 mylibrary.jar 是使用 JDK 1.8.0_181 编译的。

注意 这种方式有可能读不到 jar 编译时的版本,这时候可以看 “Build-Jdk-Spec” 。

“Build-Jdk-Spec”

“Build-Jdk-Spec” 是另一个与 JDK 版本相关的 MANIFEST.MF 属性,它表示编译 jar 包时所使用的 JDK 规范版本。与 “Created-By” 属性不同,“Build-Jdk-Spec” 属性指定的是 JDK 规范版本,而不是具体的 JDK 实现版本。

例如,以下是一个包含 “Build-Jdk-Spec” 属性的 MANIFEST.MF 文件的示例:

Manifest-Version: 1.0
Build-Jdk-Spec: 1.8
Created-By: 1.8.0_181 (Oracle Corporation)

在这个示例中,“Build-Jdk-Spec” 属性指定了编译 jar 包时所使用的 JDK 规范版本为 1.8。这意味着,这个 jar 包中的类应该符合 JDK 1.8 规范,并且应该可以在任何实现了 JDK 1.8 规范的 JDK 上编译和运行。

需要注意的是,“Build-Jdk-Spec” 属性并不是所有的 jar 包都会包含的属性,它可能只在某些特定的 jar 包中出现。另外,与 “Created-By” 属性类似,“Build-Jdk-Spec” 属性也只是提供了一些元数据信息,它并不代表 jar 包只能在指定的 JDK 规范版本下运行。

解决方案(二)

除了查看 MANIFEST.MF 文件之外,还有其他方法可以查看 jar 包的编译版本,例如:

  1. 使用命令行工具 javap。可以使用 javap 命令查看类的字节码信息,包括编译版本。例如,以下命令将显示 MyClass.class 文件的字节码信息:

    $ javap -verbose MyClass.class | grep "major version"
    ```这将输出类似以下的信息:

    minor version: 0
    major version: 51

    
    这意味着 MyClass.class 是使用 JDK 7 编译的。
  2. 使用 IDE。如果你使用 Eclipse、IntelliJ IDEA 或 NetBeans 等 Java IDE,可以在 IDE 中打开 jar 包,并查看类的属性。一般来说,IDE 会显示编译版本和其他有用的元数据信息。

总结

总的来说,上述方法都可以用来查看 jar 包的编译版本。重要的是要知道如何解压 jar 包并查找 MANIFEST.MF 文件中的 “Created-By” 属性,这是最常用的方法之一。