A jar
ist nur ein Behälter. Es ist ein Dateiarchiv à la tar
. Während a jar
möglicherweise interessante Informationen in seiner META-INF- Hierarchie enthält, ist es nicht verpflichtet, den Jahrgang der Klassen in seinem Inhalt anzugeben. Dazu muss man die class
darin enthaltenen Dateien untersuchen .
Wie Peter Lawrey im Kommentar zur ursprünglichen Frage erwähnt hat, können Sie nicht unbedingt wissen, welche JDK-Version eine bestimmte class
Datei erstellt hat, aber Sie können die Bytecode-Klassenversion der class
in a enthaltenen Datei herausfinden jar
.
Ja, das ist ein bisschen scheiße, aber der erste Schritt besteht darin, eine oder mehrere Klassen aus dem zu extrahieren jar
. Beispielsweise:
$ jar xf log4j-1.2.15.jar
Unter Linux, Mac OS X oder Windows mit installiertem Cygwin kennt der Befehl file (1) die Klassenversion.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Alternativ kann die Verwendung javap
aus dem JDK als @ jikes.thunderbolt treffend darauf hinweisen:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
Und wenn Sie in eine Windows
Umgebung ohne entweder file
oder verbannt sindgrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, ich stimme zu, dass dies javap
viel mehr über eine bestimmte class
Datei aussagt als die ursprünglich gestellte Frage.
Wie auch immer, eine andere Klassenversion, zum Beispiel:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Die Hauptnummer der Klassenversion entspricht den folgenden Java JDK-Versionen:
- 45.3 = Java 1.1
- 46 = Java 1.2
- 47 = Java 1.3
- 48 = Java 1.4
- 49 = Java 5
- 50 = Java 6
- 51 = Java 7
- 52 = Java 8
- 53 = Java 9