我如何知道哪个版本的Java编译器被用来构建一个jar?我有一个jar文件,它可以构建在三个jdk中的任何一个中。我们需要确切知道是哪一个,这样我们才能证明兼容性。编译器版本是否嵌入到类文件或jar中?


当前回答

在Windows上执行以下操作:

使用WinZip / Java JAR命令解压或解压缩JAR文件。 将其中一个类文件拖放到Eclipse Java项目中。 打开类文件。

现在Eclipse将显示准确的主版本和次版本。

其他回答

您不一定能从JAR文件本身判断出来。

下载一个十六进制编辑器,打开JAR中的一个类文件,查看字节偏移量4到7。版本信息是内置的。

http://en.wikipedia.org/wiki/Java_class_file

注:如以下评论所述,

这些字节告诉你类是为哪个版本编译的,而不是 哪个版本编译了它。

我基于david的建议使用file命令构建了一个小bash脚本(在github上)

IntelliJ Users

安装插件Archive Browser

在Intellij中打开罐子通过从文件浏览器中拖拽jar文件,您可以简单地将jar添加到任何项目中。 浏览jar文件以找到一个类文件,IntelliJ的反编译器应该显示用于创建jar的Java版本。

你检查jar的Manifest文件 例子:

Manifest-Version: 1.0 创建者:1.6.0 (IBM Corporation)

一行程序(Linux)

解压-p mylib.jar META-INF/MANIFEST. jar曼氏金融

这将打印MANIFEST的内容。MF文件转换为stdout(希望你的jar文件中有一个:)

根据构建包的方式,您将在“Created-By”或“Build-Jdk”键中找到JDK版本。