A jar
to tylko pojemnik. Jest to archiwum plików la tar
. Chociaż jar
może zawierać interesujące informacje zawarte w hierarchii META-INF , nie ma obowiązku określania rocznika klas w swojej treści. W tym celu należy sprawdzić zawarte w class
nim pliki.
Jak wspomniał Peter Lawrey w komentarzu do pierwotnego pytania, niekoniecznie musisz wiedzieć, która wersja JDK zbudowała dany class
plik, ale możesz znaleźć wersję klasy bajtowej class
pliku zawartego w pliku jar
.
Tak, to trochę do bani, ale pierwszym krokiem jest wyodrębnienie jednej lub więcej klas z jar
. Na przykład:
$ jar xf log4j-1.2.15.jar
W systemie Linux, Mac OS X lub Windows z zainstalowanym Cygwin polecenie file (1) zna wersję klasy.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Lub alternatywnie, używając javap
z JDK jako @ jikes.thunderbolt trafnie wskazuje:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
A jeśli zostaniesz przeniesiony do Windows
środowiska bez jednego file
lubgrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, zgodzę się, że javap
powie o wiele więcej o danym class
pliku niż pierwotne pytanie.
W każdym razie inna wersja klasy, na przykład:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Numer główny wersji klasy odpowiada następującym wersjom JDK Java:
- 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