Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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 版だと未来の日付になります。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした