A jar
- это просто контейнер. Это файловый архив а-ля 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