Java 9的版本字符串方案中第4个数字是什么意思?

Anj*_*ana 20 versioning version azul-zulu 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)
Run Code Online (Sandbox Code Playgroud)

4个数字代表什么?

Ste*_*n C 23

那篇博文有点过时了.JEP 223:新版本字符串方案中记录了Java 9中实际实现的方案

前三个数字的含义是标准化的.第4个和(任何)后续数字的含义留给供应商指定.

另请注意第2和第3个数字之间的有趣关系.

以下是JEP的相关部分.

"序列可以是任意长度,但前三个元素分配具体含义,如下:

$MAJOR.$MINOR.$SECURITY
Run Code Online (Sandbox Code Playgroud)

$MAJOR - 主要版本号,针对包含新版Java SE平台规范中指定的重要新功能的主要版本递增,例如JSR 337 for Java SE 8.在主要版本中可以删除功能,如果提前通知至少提前一个主要版本,并且在合理的情况下可以进行不兼容的更改.$MAJORJDK 8 的版本号是8; $MAJORJDK 9 的版本号是9.当$MAJOR递增时,将删除所有后续元素.

$MINOR - 次要版本号,针对可能包含兼容的错误修复的次要更新版本,相关平台规范的维护版本规定的标准API的修订,以及该规范范围之外的实现功能(如新的JDK特定API)递增,其他服务提供商,新垃圾收集器和新硬件架构的端口.

$SECURITY - 安全级别,对于包含关键修复(包括提高安全性所必需的修复程序)的安全更新版本而增加.增量$SECURITY时不会重置为零$MINOR.因此,$SECURITY给定$MAJOR值的较高值始终表示更安全的释放,无论其值如何$MINOR.

版本号的第四个和后面的元素可供JDK代码库的下游使用者免费使用.除了相应安全版本中的安全修复之外,这样的消费者可以例如使用第四元素来识别包含少量关键非安全修复的补丁版本.

  • @Ordous [Semver part 7](http://semver.org/#spec-item-7):"[......]当次要版本增加时,补丁版本必须重置为0." 当增加`$ MINOR`数字时,JEP明确地****不重置`$ SECURITY`数字. (5认同)

Nam*_*man 8

也就是说,中间应该有3个数字和2个句点.

不一定,您可以使用JDK本身验证版本,如下所述.

除了在另一个答案中由@Stephen链接的JEP之外,还有一个API添加到JDK以及Runtime.Version可用于验证给定版本字符串的API .这可以使用示例存根来完成:

[我想在这里使用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");
Run Code Online (Sandbox Code Playgroud)

代码利用了Version.parse那个

将给定字符串解析为包含版本号的有效版本字符串,然后是预发布和构建信息.

并且可以进一步用于(主要)获取(运行时)版本的主要,次要,预发布和安全号等信息.