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

19

В соответствии с этим блогом на 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 числа?

    
задан Anjana 07.11.2017 в 11:49
источник
  • Обратите внимание, что это может измениться и в будущем. Возможно, это не шаблон, а семантика. mail.openjdk.java.net/pipermail/discuss/2017-September/... –  the8472 07.11.2017 в 20:45

2 ответа

20

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

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

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

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

  

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

$MAJOR.$MINOR.$SECURITY
     

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

     

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

     

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

     

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

    
ответ дан Stephen C 07.11.2017 в 12:04
источник
  • @JAB Они делают, а не письмо. Семантическое ведение версий допускает расширение после первых трех меток. Дополнительные ярлыки для метаданных предварительного выпуска и сборки доступны в качестве расширений в формате MAJOR.MINOR.PATCH. Именно это. –  Ordous 07.11.2017 в 18:46
  • Их главный архитектор просто предложил, чтобы номера версий Java меняли дату релиза, поэтому мы получим что-то похожее на семантическое управление версиями, но на самом деле просто набираем действительно очень быстро, так что оно выглядит «продвинутым» и «прогрессивным» »и другие маркетинговые малярии. –  Ti Strga 07.11.2017 в 18:57
  • @Ordous Semver, часть 7: «[...] Версия патча ДОЛЖНА быть сброшена на 0, когда малая версия увеличивается.» JEP явно не сбрасывает номер $ SECURITY при увеличении номера $ MINOR. –  8bittree 07.11.2017 в 19:30
9
  

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

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

В дополнение к JEP, который имеет значение true, связанный с @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) .

    
ответ дан nullpointer 07.11.2017 в 11:51
источник