А jar
- просто контейнер. Це файловий архів ā la tar
. Хоча jar
може бути цікава інформація, що міститься в її ієрархії META-INF , вона не зобов'язана вказувати вінтаж класів у її вмісті. Для цього треба вивчити class
файли в них.
Як згадував Пітер Лорі в коментарі до початкового запитання, ви не завжди можете знати, який випуск JDK створив даний class
файл, але ви можете дізнатися версію байтового коду class
файлу, що міститься в jar
.
Так, це щось відстійно, але перший крок - витягнути один або кілька класів із jar
. Наприклад:
$ jar xf log4j-1.2.15.jar
У Linux, Mac OS X або Windows із встановленим Cygwin команда file (1) знає версію класу.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Або в якості альтернативи, використовуючи javap
від JDK як @ jikes.thunderbolt, влучно вказує:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
І якщо ви потрапили в Windows
оточення без жодного file
абоgrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, я погоджуюся, що javap
розповім набагато більше про певний class
файл, ніж задано оригінальне запитання.
У будь-якому випадку, інша версія класу, наприклад:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Основне число версій класу відповідає наступним версіям Java JDK:
- 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