6

Список основных версий номеров формата файлов классов Java

1

Я наткнулся на список основных номеров версий Java в одном из постов и хотел бы уточнить его происхождение. Вот как он выглядит:

Java Major version
23 67
22 66
21 65
20 64
19 63
18 62
17 61
16 60
15 59
14 58
13 57
12 56
11 55
10 54
9 53
8 52
7 51
6 50
5 49
1.4 48
1.3 47
1.2 46
1.1 45
1.0.2 45

Откуда взялся этот список? Есть ли конкретная ссылка на него? Лучше всего, если будет что-то, что показывает также минорные версии?

4 ответ(ов)

0

Вы можете найти список версий классов Java в формате .class на странице Wikipedia, посвященной формату файлов классов:

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

В разделе с байтовыми смещениями 6 и 7 указаны версии, соответствующие конкретным версиям Java VM. Эти данные могут быть полезны, если вы сталкиваетесь с проблемами совместимости или хотите узнать, к какой версии Java относиться ваш .class файл.

0

Если у вас есть файл класса по пути build/com/foo/Hello.class, вы можете проверить, на какой версии Java он был скомпилирован, используя следующую команду:

javap -v <путь к файлу класса> | grep "major"

Пример использования:

$ javap -v build/classes/com/example/Book.class | grep major
  
major version: 57

Согласно таблице в вопросе, версия major 57 означает, что файл класса был скомпилирован до уровня байт-кода JDK 13.

0

Если вы столкнулись с проблемой "ошибка компиляции классового файла", это можно решить, изменив JRE проекта на соответствующий через Eclipse.

  1. Перейдите в настройки пути сборки (Build Path).
  2. Выберите "Настроить путь сборки" (Configure Build Path).
  3. Измените библиотеку на соответствующую из таблицы, которую показал ваш друг.
  4. Создайте "jar файл" и скомпилируйте его для выполнения.

Я сделал это, и у меня все заработало.

0

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

*.class)
echo "/** "
javap -verbose "$1" | grep version | sed -e 's/50/Java6/' -e 's/51/Java7/' -e 's/52/Java8/' -e 's/53/Java9/' -e 's/54/Java10/' -e 's/55/Java11/' -e 's/56/Java12/' -e 's/57/Java13/'
echo " **/"
java -jar ~/bin/cfr-0.150.jar "$1" | enscript --color --language=ansi --highlight=java -o - -q
;;

Данный скрипт сначала выводит строку с комментариями, содержащими информацию о версии Java, с помощью команды javap -verbose. Вместо числового обозначения версии, он отображает соответствующее значение (например, "Java6", "Java7" и так далее), заменяя коды версий с помощью sed. После этого он использует инструмент CFR для декомпиляции класса и выводит результат с подсветкой синтаксиса с помощью enscript.

Если у вас есть дополнительные вопросы или нужна помощь, дайте знать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь