Java 9版本字符串方案中的第四个数字代表什么?

20
根据Java 9的新版本字符串方案的这篇博客,版本应该像MAJOR.MINOR.SECURITY,即中间应该有2个句点和3个数字。
然而,在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 个数字代表什么?


请注意,这可能会在未来再次更改。也许不是模式,而是语义。http://mail.openjdk.java.net/pipermail/discuss/2017-September/004333.html - the8472
2个回答

25

这篇博客文章有些过时了。Java 9中实际实现的方案在JEP 223:New Version-String Scheme中有文档记录。

前三个数字的含义是标准化的,第四个及之后的数字由厂商自行指定。

同时请注意第二个和第三个数字之间的有趣关系。

以下是JEP的相关部分。

“序列长度可以是任意的,但前三个元素具有特定的含义,如下所示:

$MAJOR.$MINOR.$SECURITY

$MAJOR - 主版本号,针对包含Java SE平台规范新版中指定的重要新功能的主要发布版本递增,例如Java SE 8的JSR 337。在一个主要发布版本中可能会删除功能,在至少提前一个主要发布版本时进行通知,并且可能会在有正当理由时进行不兼容的更改。JDK 8的$MAJOR版本号为8;JDK 9的$MAJOR版本号为9。当$MAJOR递增时,所有后续元素都将被删除。

$MINOR - 次版本号,针对可能包含兼容性错误修复、相关平台规范维护发布所要求的标准API修订以及超出该规范范围的实现功能(如新的JDK特定API、额外的服务提供程序、新的垃圾收集器和端口到新硬件架构)的次要更新版本递增。

$SECURITY - 安全级别,针对包含必要的关键修复,包括那些用于改进安全性的安全更新发行版递增。$SECURITY$MINOR递增时不会重置为零。因此,给定$MAJOR值的较高$SECURITY值总是表示更安全的发布,而与$MINOR的值无关。

版本号的第四个及以后元素可供JDK代码库的下游使用者自由使用。这样的消费者可以使用第四个元素来标识补丁发布,其中包含少量关键的非安全修复,以及相应安全发布中的安全修复。


@JAB 他们确实有,但不是一字不改。语义化版本允许在前三个标签之后添加扩展,“预发布”和“构建元数据”的附加标签可以作为 MAJOR.MINOR.PATCH 格式的扩展使用。这就是它。 - Ordous
他们的首席架构师刚刚提议将Java版本号更改为发布日期,因此我们最终会得到类似于语义化版本控制的东西,但实际上只是快速增加以使其看起来“先进”、“进步”和其他营销用语。 - Ti Strga
5
@Ordous Semver part 7中写道:“[...]当次要版本号增加时,修订版本号必须重置为0。” JEP明确规定,在增加$MINOR版本号时,不重置$SECURITY数字。 - 8bittree

8

即,应该有3个数字和2个句点。

并不一定,您可以使用JDK本身进行版本验证,如下所述。

除了JEP(由@Stephen在{{link1:其他答案}}中链接)之外,JDK还添加了API用于Runtime.Version {{link2:}},可用于验证给定的版本字符串。这可以通过示例存根来完成:

【我想在这里使用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,它可以解析给定的字符串作为有效的版本字符串,其中包含版本号后跟预发布和构建信息。主要用于获取(运行时)版本的主要、次要、预发布和安全号等信息。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接