Подтвердить что ты не робот

Что означает четвертое число в строковой схеме версии Java 9?

Согласно этот блог в строковой схеме новой версии Java 9, версия должна быть как MAJOR.MINOR.SECURITY, т.е. есть должно быть 3 числа и 2 периода между ними.

Однако, с Azul Zulu 9, когда я печатаю версию Java, у него есть 4 числа и 3 периода:

./jdk/bin/java -version
openjdk version "9.0.0.15"
OpenJDK Runtime Environment (Zulu build 9.0.0.15+181)
OpenJDK 64-Bit Server VM (Zulu build 9.0.0.15+181, mixed mode)

Что представляют собой 4 числа?

4b9b3361

Ответ 1

Эта публикация в блоге немного устарела. Фактически реализованная схема в Java 9 задокументирована в JEP 223: Новая версия-String Scheme

Значение первых трех чисел стандартизировано. Значение 4-го и (любого) последующих номеров предоставляется поставщику для указания.

Обратите внимание на интересную взаимосвязь между вторым и третьим номерами.

Вот соответствующие части JEP.

"Последовательность может быть произвольной длины, но первым трем элементам присваиваются конкретные значения, а именно:

$MAJOR.$MINOR.$SECURITY

$MAJOR - основной номер версии, увеличенный для основного выпуска, который содержит значительные новые функции, как указано в новой редакции спецификации платформы Java SE, например JSR 337 для Java SE 8. Возможности могут быть удалены в основной выпуск, заблаговременное уведомление, по крайней мере, одного крупного выпуска, и если это оправдано, могут быть сделаны несовместимые изменения. Номер версии $MAJOR для JDK 8 равен 8; номер версии $MAJOR для JDK 9 равен 9. Когда $MAJOR увеличивается, все последующие элементы удаляются.

$MINOR - младший номер версии, увеличенный для небольшого выпуска обновлений, который может содержать совместимые исправления ошибок, изменения стандартных API-интерфейсов, предусмотренные выпуском Maintenance Release соответствующей спецификации платформы, и функции реализации, выходящие за рамки этой Спецификации, как новые API-интерфейсы JDK, дополнительные поставщики услуг, новые сборщики мусора и порты для новых аппаратных архитектур.

$SECURITY - Уровень безопасности, увеличенный для выпуска обновления безопасности, содержащий критические исправления, в том числе необходимые для повышения безопасности. $SECURITY не reset к нулю, когда $MINOR увеличивается. Поэтому более высокое значение $SECURITY для данного значения $MAJOR всегда указывает на более безопасный выпуск независимо от значения $MINOR.

Четвертый и более поздние элементы номера версии являются бесплатными для использования потребителями нижней части базы данных JDK. Такой потребитель может, например, использовать четвертый элемент для идентификации релизов исправлений, которые содержат небольшое количество критических исправлений, не относящихся к безопасности, в дополнение к исправлениям безопасности в соответствующем выпуске безопасности.

Ответ 2

i.e, предполагается, что должно быть 3 числа и 2 периода между ними.

Не обязательно, и вы можете проверить версии, используя сам JDK, как описано ниже.

В дополнение к JEP, который выполняется как связанный с @Stephen в другом ответе, добавлено дополнение API к JDK, а также для Runtime.Version, который может использоваться для проверки данной строки версии. Это можно сделать, используя образец заглушки, как:

[Интересно, что JShell может быть интересен здесь, нет IDE!]

Runtime.Version version = Runtime.Version.parse("9");
version = Runtime.Version.parse("9.0.1");
version = Runtime.Version.parse("9.0.0.15");
version = Runtime.Version.parse("9.0.0.15+181");

В коде используется Version.parse, который

Разбирает заданную строку как допустимую строку версии, содержащую версию номер, за которым следует информация о предварительном выпуске и сборке.

и может быть дополнительно использован (в первую очередь) для получения информации, такой как основной, младший, предварительный выпуск и номер безопасности версии (runtime).