Java的版本表示法将在Java 10中有所变化

这篇文章是多次发布到地平线去的。

Java自从10版本之后变成了基于时间的发布。为了适应这个变化,版本号也发生了变化,下面是总结的概述。

请参考JEP 322:基于时间的发布版本控制来获取更详细的信息。

版本号

以下是四种表示法:$FEATURE.$INTERIM.$UPDATE.$PATCH。
具体来说,就是像10.0.1.2这样的表示法。
(Java 8之前的Update〜表示法已经消失了)

意味タイミング次回予定内容$FEATURE機能リリース半年ごと2018年3月内容にかかわらず半年ごとにリリース
機能追加や互換性のない変更、機能の削除2を含む$INTERIM中間リリース予定なし-互換性のあるバグ修正と機能強化3
(標準APIの変更を含まない)$UPDATEアップデートリリース機能リリースの1ヶ月後、およびそれ以降3ヶ月ごと2018年4月
2018年7月セキュリティの修正
最新機能のバグ修正$PATCHパッチリリース必要時のみ-重大な問題を解決するための最低限の修正

详细的规则

    • ある桁以降がすべて 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日期。所以,如果是早期访问版本,日期会是将来的日期。

广告
将在 10 秒后关闭
bannerAds