LoginSignup
6
3

More than 5 years have passed since last update.

Java 10 で変わる Java のバージョン表記

Last updated at Posted at 2018-03-21

(この記事は 地平線に行く とのマルチポストです)

Java は、バージョン 10 以降タイムベースリリースに変わりました。
それに合わせて、バージョン表記がまた変わったので概要をまとめました。1

詳細は JEP 322: Time-Based Release Versioning を参照。

バージョン番号

$FEATURE.$INTERIM.$UPDATE.$PATCH という4つの表記になります。
具体的には、 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

ただ、 Runtime.Version は Java 9 で追加されたクラスです。
もし、Java 8 以前にも対応する必要があるならば、システムプロパティ java.version から取得するしかないのでご注意ください。

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"

  1. とはいえ、Java 9 とほぼ一緒 

  2. この場合、少なくとも1つ前の機能リリースで予告されます。 

  3. JDK1.4.1, JDK1.4.2 のようなケースを想定しているそうです。 

  4. 正確には GA の日付。なので、Eary Access 版だと未来の日付になります。 

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3