New Version-String Scheme(新しいJavaのバージョン表記体系)
新しいJavaのバージョン表記体系がJEP 223で提案されています.
概要
Javaのバージョン表記をメジャー,マイナーバージョンに加えてセキュリティアップデートにも対応できるような体系を作るJEPです.
また,今まで混在していたバージョン表記を統一して一つの体系として再構築していきます.
今後使われるバージョン表記は新しいバージョン表記体系で記述されます.
すでに使用されている過去のバージョン表記については変更しないようです.
バージョン表記のセキュリティアップデート対応
今までのJavaのバージョン表記はマイナーアップデートしてuXXやUpdate XXという風に記述していました.
ここではJDK7のXXというupdateには「JDK 7 Update XX」と表記していきます.
さて,JDK 7 Update 60とJDK 7 Update 55とを比較してみましょう.
この時に一体どちらのUpdateのほうがより最新のセキュリティアップデートが含まれているでしょうか?
「JDK 7 Update 60」のアップデートの数字の方が「JDK 7 Update 55」よりも5つ大きいので,「JDK 7 Update 60」でしょうか?
果たして本当にそうでしょうか?
実はどちらも同じセキュリティアップデートを含んでいます.*1
現行のUpdateの表記方法では異なる二種類のアップデート(マイナーアップデートとセキュリティアップデート)を一つの数字で表していました.
このような現行のUpdateを用いる表記方法では多くの混乱を招きます.
更にこのようなUpdateを用いた際のアップデート内容の違いを理解するためには複雑な現行のバージョン体系を完全に理解しなければいけません.
ここでは現行のバージョン体系の内容については割愛します.
新バージョン体系
新しいバージョンの体系ではJavaのバージョンを示す「バージョンナンバー」($VNUM)と「付加情報」の2つに分けられます.
バージョンナンバー
新しいJavaのバージョン体系では,マイナーアップデートとセキュリティアップデートが分けられて,それぞれ別々の値で管理されるようになります.
メジャーバージョンを$MAJOR,マイナーアップデートに対応するマイナーバージョンを$MINOR,セキュリティアップデートに対応するセキュリティレベルを$SECURITYとして表すと,新しいバージョンナンバーは「$MAJOR.$MINOR.$SECURITY」として表されます.
- $MAJOR:Java8やJDK8でいうところの8という数字が対応します.いわゆるJavaのバージョンのことです.
- $MINOR:マイナーアップデートがされるとインクリメントされます.$MAJORが変わると0クリアされますが,同じ$MAJORであれば増え続けていきます.
- $SECURITY:セキュリティアップデートがあるとインクリメントされます.$MAJORが変わると0クリアされますが,同じ$MAJORであれば増え続けていきます.
例えば,先ほどの「JDK7u60」は6回のマイナーアップデートと14回のセキュリティアップデートがあったため,「7.6.14」と表記されます.*2
分かりやすいですね.
ちなみに「JDK7U55」は「7.5.14」と表記されるので,セキュリティアップデートで比較したければ3つ目の数字を見ればセキュリティアップデートの観点では異ならないということがわかります.
ちなみに,$SECURITYのあとにも数字が続く場合があります(4番目,5番目,・・・の数字).
これらの数字の使い方は特に規定されておらず,自由に使用しても良いことになっています.
付加情報
付加情報は以下の3つの情報に分けられます.
すべてオプションなので省略可能です.
()内は使える文字です.
$PRE(文字,数字):リリース前ということを示す情報です.例えばアーリアクセスということを示すeaなどです.
$BUILD(数字):ビルドナンバーです.バージョンナンバー($VNUM)が変わった場合はリセットされます.
$OPT(文字,数字):追加のビルド情報です.例えばビルドされた日時などです.
$PREと$OPTの前には-をつけます.また,$BUILDの前には+をつけることで区別します.
例えば,JDK 9のアーリアクセス版でビルド19のバイナリ*3に対してのバージョン情報は「9.0.0-ea+19」と表記します.
省略記法
バージョンナンバーにおいて$MINORと$SECURITYが共に0であれば,それらの数字を省略することが可能です.
例えば先程の「9.0.0-ea+19」は「9-ea+19」と書くことができます.
1.8.0などの最初の1を取り除く
忌々しき1を取り除くことも提案されています.
さらば古きJava・・・
実例(おまけ)
JEP内で使われている実例をいくつか上げます.
今後のリリースの表記について
既存の体系 | 新しい体系 | ||
---|---|---|---|
リリースの種類 | long(short) | long(short) | |
アーリアクセス | 1.9.0-ea-b19(9-ea) | 9.0.0-ea+19(9-ea) | |
メジャー | 1.9.0-b100(9) | 9.0.0+100(9) | |
セキュリティ#1 | 1.9.0_5-b20(9u5) | 9.0.1+20(9.0.1) | |
セキュリティ#2 | 1.9.0_11-b12(9u11) | 9.0.2+12(9.0.2) | |
マイナー#1 | 1.9.0_20-b62(9u20) | 9.1.2+62(9.1.2) | |
セキュリティ#3 | 1.9.0_25-b15(9u25) | 9.1.3+15(9.1.3) | |
セキュリティ#4 | 1.9.0_31-b08(9u31) | 9.1.4+8(9.1.4) | |
マイナー#2 | 1.9.0_40-b45(9u40) | 9.2.4+45(9.2.4) |
過去のリリースとの対応例
実際 | 仮に新しい体系で表現した場合 | |
---|---|---|
リリースの種類(年/月) | long(short) | long(short) |
セキュリティ(2013/04) | 1.7.0_21-b11(7u21) | 7.4.10+11(7.4.10) |
セキュリティ(2013/06) | 1.7.0_25-b15(7u25) | 7.4.11+15(7.4.11) |
マイナー(2013/09) | 1.7.0_40-b43(7u40) | 7.5.11+43(7.5.11) |
セキュリティ(2013/10) | 1.7.0_45-b18(7u45) | 7.5.12+18(7.5.12) |
セキュリティ(2014/01) | 1.7.0_51-b13(7u51) | 7.5.13+13(7.5.13) |
セキュリティ(2014/04) | 1.7.0_55-b13(7u55) | 7.5.14+13(7.5.14) |
マイナー(2014/05) | 1.7.0_60-b19(7u60) | 7.6.14+19(7.6.14) |
セキュリティ(2014/07) | 1.7.0_65-b20(7u65) | 7.6.15+20(7.6.15) |