2010-12-14 37 views

回答

11

這是不可能的,因爲你甚至不需要JDK來構建一個JAR文件 - 它只是一個帶有類和一個清單文件的ZIP文件。

你可以找到什麼版本的the class file format被使用。主版本號映射到majorJDK版本:

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編譯的。

+1

雖然你說的所有內容都是正確的,但它確實告訴你什麼是編譯器編譯你的類,而不是用什麼jar工具來編譯你的類。大多數時候人們會認爲它們來自同一個工具包。 – 2011-01-12 19:42:42

+0

答案http://stackoverflow.com/a/3313839/2776843好得多。檢查一下。 – shamanSK 2016-11-03 08:50:23

10

大多數罐子都是使用與jdk一起提供的「jar」工具構建的。

在SUN的JDK中,提供的「jar」工具將在嵌入的META-INF/MANIFEST.MF文件中添加一個「Created-By」行。

該行將指定創建的JAR的JDK版本(在我的情況「創建-者:1.6.0_17(Sun微系統公司)」)

其他Java廠商往往會做同樣的。

+0

Ant jar任務在內部使用jar工具嗎?因爲我認爲更多的JAR文件是用Ant構建的,而不是通過命令行工具。 – 2010-12-14 15:54:50

6

在Jars MANIFEST.MF中可能有一個Build-Jdk屬性,它應該是您要查找的內容。

+0

我只打了幾個類文件,而Build-Jdk根本就不在MANIFEST.MF文件中。 – 2010-12-14 15:47:31

+0

嗯,你可能是對的。我正在用Created-By:Apache Maven看一個jar。然而,文檔似乎同意你的看法。 – Jim 2010-12-14 15:50:37

8

您可以提取jar文件的類文件,並使用下面的命令:

javap -verbose SomeClass | grep major 

應該給你的類文件的版本號。