Что означает 4-е число в строковой схеме версии Java 9?
Согласно этому блогу о новой строковой схеме версии Java 9, версия должна быть похожа MAJOR.MINOR.SECURITY
предполагается, что между ними должно быть 3 числа и 2 периода.
Однако в Zulu 9 от Azul, когда я печатаю версию 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 числа?
2 ответа
Эта запись в блоге немного устарела. Фактически реализованная схема в Java 9 документирована в JEP 223: Новая версия-String Scheme
Значение первых трех чисел стандартизировано. Значение 4-го и (любого) последующих номеров оставлено на усмотрение продавца.
Обратите внимание также на интересные отношения между 2-м и 3-м числами.
Вот соответствующие части JEP.
"Последовательность может иметь произвольную длину, но первым трем элементам присваиваются определенные значения, как указано ниже:
$MAJOR.$MINOR.$SECURITY
$MAJOR
- Основной номер версии, увеличенный для основного выпуска, который содержит значительные новые функции, как указано в новом издании Спецификации платформы Java SE, например, JSR 337 для Java SE 8. Функции могут быть удалены в основном выпуске при условии предварительного уведомления по крайней мере, один основной выпуск раньше времени, и несовместимые изменения могут быть сделаны, когда это оправдано.$MAJOR
номер версии JDK 8 - 8;$MAJOR
номер версии JDK 9 - 9. Когда$MAJOR
увеличивается, все последующие элементы удаляются.
$MINOR
- Дополнительный номер версии, увеличенный для вспомогательного выпуска обновления, который может содержать совместимые исправления ошибок, версии стандартных API-интерфейсов, предусмотренных Техническим выпуском соответствующей Спецификации платформы, и функции реализации, выходящие за рамки этой Спецификации, такие как новые специфичные для JDK API-интерфейсы дополнительные поставщики услуг, новые сборщики мусора и порты для новых аппаратных архитектур.
$SECURITY
- Уровень безопасности, повышенный для выпуска обновления безопасности, содержащего критические исправления, в том числе необходимые для повышения безопасности.$SECURITY
не сбрасывается в ноль, когда$MINOR
увеличивается Более высокое значение$SECURITY
для данного$MAJOR
Поэтому значение всегда указывает на более безопасный выпуск, независимо от значения$MINOR
,Четвертый и более поздние элементы номера версии бесплатны для использования нижестоящими потребителями кодовой базы JDK. Такой потребитель может, например, использовать четвертый элемент для идентификации выпусков исправлений, которые содержат небольшое количество критических исправлений, не связанных с безопасностью, в дополнение к исправлениям безопасности в соответствующем выпуске безопасности.
т.е. должно быть 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
тот
Анализирует данную строку как допустимую строку версии, содержащую номер версии, за которым следует предварительная версия и информация о сборке.
и может в дальнейшем использоваться (главным образом) для получения информации, такой как основной, вспомогательный, предварительный выпуск и номер безопасности (во время выполнения) версии.