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