Java的版本表示法将在Java 10中有所变化
这篇文章是多次发布到地平线去的。
Java自从10版本之后变成了基于时间的发布。为了适应这个变化,版本号也发生了变化,下面是总结的概述。
请参考JEP 322:基于时间的发布版本控制来获取更详细的信息。
版本号
以下是四种表示法:$FEATURE.$INTERIM.$UPDATE.$PATCH。
具体来说,就是像10.0.1.2这样的表示法。
(Java 8之前的Update〜表示法已经消失了)
详细的规则
-
- ある桁以降がすべて 0 なら、省略して表記する
例: 11.0.0.0 → 11
例: 11.0.2.0 → 11.0.2
$FEATURE, $INTERIM がインクリメントされた場合、それ以降の数字はリセットする
例: 11.0.2 → 11.0.2.1 → 11.1 → 11.1.1
バージョン番号以降には、以下を付与する
プレリリース識別子(optional)
例: 11.0.2-ea
ビルド番号
例: 11.0.2+13
LTS などのオプション情報(optional)
例: 11.0.2+13-LTS
在程序中获取
这些可以在 Runtime.Version 类的每个方法中获取到。
jshell> Runtime.version().feature()
$1 ==> 10
jshell> Runtime.version().interim()
$2 ==> 0
jshell> Runtime.version().update()
$3 ==> 0
jshell> Runtime.version().patch()
$4 ==> 0
jshell> Runtime.version().pre()
$6 ==> Optional.empty
jshell> Runtime.version().build()
$5 ==> Optional[46]
jshell> Runtime.version().toString()
$7 ==> "10+46"
要确认一个版本是比另一个版本新还是旧,与其逐个比较上述内容,使用 compareTo 方法比较会更可靠。
jshell> Runtime.version().toString()
$1 ==> "10+46"
jshell> Runtime.version().compareTo(Runtime.Version.parse("10.0.1")) > 0
$2 ==> false
jshell> Runtime.version().compareTo(Runtime.Version.parse("9.0.1")) > 0
$3 ==> true
如果您需要与Java 8以前的版本兼容,那么请注意,你只能从系统属性java.version中获取,因为Runtime.Version是在Java 9中添加的类。
jshell> System.getProperty("java.version")
$4 ==> "10"
顺便提一下
「リリース日4」と「ベンダーバージョン」がシステムプロパティに追加されました。Oracle JDK の場合、ベンダーバージョンは予定通りに「リリース年.リリース月」の形式で表記されています。
jshell> System.getProperty("java.version.date")
$1 ==> "2018-03-20"
jshell> System.getProperty("java.vendor.version")
$2 ==> "18.3"
虽然如此,几乎与Java 9相同。
在这种情况下,至少会在之前的一个功能发布中作出预警。
他们考虑了JDK1.4.1、JDK1.4.2之类的情况。
准确来说是GA日期。所以,如果是早期访问版本,日期会是将来的日期。