Какая версия javac создала мою банку?

В любом случае, не зная, как работает API FPDF, кажется, что он просто сохраняет глобальные состояния.

Итак, сначала вызовите switch + colorization (карта массива была бы проще), затем добавьте -> Cell и, наконец, -> Row, как в:

while($row = mysql_fetch_array($records)){

    switch ($row['ssh']) { 
        case '2-3Meters' : 
        $pdf->SetFillColor(204, 153, 0); 
        …
    }

    $pdf->Cell($row['ssh'], 1, 1, 'L', TRUE);

    $pdf->Row(array(1,2,3,4,1));
}
200
задан tshepang 19 April 2014 в 10:37
поделиться

6 ответов

Вы не можете сказать наверняка по самому JAR-файлу.

Загрузите шестнадцатеричный редактор и откройте один из файлов классов внутри JAR и посмотрите на байтовые смещения с 4 по 7. Информация о версии встроена.

http://en.wikipedia.org/wiki/Java_class_file

Примечание. Как указано в комментарии ниже,

эти байты сообщают вам, для какой версии был скомпилирован класс, а не какая версия его скомпилировала.

85
ответ дан 23 November 2019 в 05:05
поделиться

Можно легко сделать это на использовании командной строки после процесса:

, Если Вы знаете какое-либо имя класса в банке, можно использовать следующую команду:

javap -cp jarname.jar -verbose packagename.classname | findstr major

пример:

    C:\pathwherejarlocated> javap -cp jackson-databind-2.8.6.jar -verbose com.fasterxml.jackson.databind.JsonMappingException | findstr major

Вывод:

    major version: 51

Справочник:

JDK 1.0 — major version 45 
DK 1.1 — major version 45 
JDK 1.2 — major version 46 
JDK 1.3 — major version 47 
JDK 1.4 — major version 48 
JDK 1.5 — major version 49 
JDK 1.6 — major version 50 
JDK 1.7 — major version 51 
JDK 1.8 — major version 52 
JDK 1.9 — major version 53 

пз: если Вы не знаете ни одного имени класса, можно легко сделать это при помощи любого из декомпиляторов банки или путем простого использования после команды для извлечения файла банки:

jar xf myFile.jar
0
ответ дан 23 November 2019 в 05:05
поделиться

Каждый файл класса имеет номер версии, встроенный для уровня байтового кода, который JVM использует, чтобы узнать, нравится ли ей этот конкретный фрагмент байтового кода или нет. Это 48 для Java 1.4, 49 для Java 1.5 и 50 для Java 6.

Существует множество компиляторов, которые могут генерировать байтовый код на каждом уровне, javac использует параметр «-target», чтобы указать, какой уровень байтового кода генерировать, и Java 6 javac может генерировать байтовый код как минимум для 1.4, 1.5 и 6. Я не верю, что компилятор вставляет что-либо, что может идентифицировать сам компилятор, о чем, я думаю, вы просите. Также все чаще используется компилятор Eclipse, так как это единственный jar-файл, который может работать только с JRE.

В jar-файле обычно много классов, и каждый из них независим, поэтому вам нужно исследовать все классы в jar-файле, чтобы быть уверенным в характеристиках содержимого.

2
ответ дан 23 November 2019 в 05:05
поделиться

Вы можете определить бинарную версию Java, проверив первые 8 байт (или используя приложение, которое может это сделать).

Сам компилятор, насколько мне известно, не вставляет никакой идентифицирующей подписи. В файле VM spec class format я не могу обнаружить такой вещи.

4
ответ дан 23 November 2019 в 05:05
поделиться

Компилятор Java ( javac ) не создает jar-файлы, он переводит файлы Java в файлы классов. Инструмент Jar ( jar ) создает настоящие банки. Если пользовательский манифест не был указан, в манифесте по умолчанию будет указано, какая версия JDK использовалась для создания jar-файла.

12
ответ дан 23 November 2019 в 05:05
поделиться

A jar - это просто контейнер. Это файловый архив ā la tar. Хотя jar может содержать интересную информацию в иерархии META-INF, он не обязан указывать винтаж классов в своем содержимом. Для этого необходимо изучить файлы классов.

Как отметил Питер Лоури в комментарии к исходному вопросу, вы не обязательно можете узнать, в каком выпуске 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
300
ответ дан 23 November 2019 в 05:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: