【发布时间】:2011-05-25 08:42:57
【问题描述】:
有没有办法找出用于构建 .jar 文件的 JDK 版本?
【问题讨论】:
有没有办法找出用于构建 .jar 文件的 JDK 版本?
【问题讨论】:
这是不可能的,因为您甚至不需要 JDK 来构建 JAR 文件 - 它只是一个包含类和清单文件的 ZIP 文件。
您可以查到the class file format 使用的是哪个版本。主要版本号映射到主要JDK版本:
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)
但是,java 编译器有一个选项可以使用以前版本的类文件格式,这经常用于实现向下兼容。但是,如果您发现类文件版本主编号为 50,您就知道这些类肯定不是使用 Java 5 或更早版本的 JDK 编译的。
【讨论】:
大多数 jar 是使用 jdk 打包提供的“jar”工具构建的。
在 SUN 的 JDK 中,提供的“jar”工具将在嵌入式 META-INF/MANIFEST.MF 文件中添加“Created-By”行。
该行将指定创建 JAR 的 JDK 版本(在我的例子中是“创建者:1.6.0_17 (Sun Microsystems Inc.)”)
其他 Java 供应商也倾向于这样做。
【讨论】:
您可以从jar文件中提取类文件并使用以下命令:
javap -verbose SomeClass | grep major
应该给你类文件的版本号。
【讨论】:
在 Jars MANIFEST.MF 中可能有一个 Build-Jdk 属性,这应该是您正在寻找的。p>
【讨论】: