バージョン
自分のモジュール、または依存関係にあり、インポートする必要のあるモジュールにもバージョンを指定することができる(必須ではない)。また、JAMファイルの命名規約にもバージョンは登場する。
バージョンの形式は以下の通りだ。
メジャー番号[.マイナー番号[.マイクロ番号[.アップデート番号]]][-修飾名]
各番号は正の整数で指定する。修飾名は、「beta2」や「b31-alpha1」といったように、任意で指定可能な文字列だ。正式リリースバージョンのモジュールには修飾名をつけないようにする。
インポートする際など、バージョン番号を指定するとき、ワイルドカードを指定してバージョンの範囲を指定することができる。バージョンの範囲指定は以下のように行う。
- 「+」…「以上」を表すワイルドカード。"1.2+"は、バージョン1.2以上のモジュールということだ。
- 「*」…「ファミリー」を表すワイルドカード。単純な前方一致が行われる。"1.*"は、メジャーバージョン番号が1のもの、という指定だ。
- 「[]」…範囲を区切ってワイルドカードを指定する場合に用いる。"1.2.[3+]"は、「1.2.3 <= x < 1.3」という指定になる。
- 「;」…複数のバージョン指定を同時に指定する。"1.[2+];2*"という指定は、1.2以上と2が含まれるが、3は含まれない。
これだけでもかなり柔軟なバージョン指定が可能になるが、「特定のバージョンだけ除外したい」などの特殊なバージョン指定を行ってインポートしたいときもあるかもしれない。そうした場合は「インポートポリシー」をJavaコードで記述することもできる。ただし、詳細は割愛する。
モジュールの実行
ドラフトでは、javaコマンドにモジュールを指定できるようにする案が提示されている。 以下のような形だ。
java -module モジュール名:バージョン
後述するように、外部サーバのURLリポジトリから自動でモジュールをダウンロードできる仕組みとうまく連携させれば、自分の好きなとき、好きなJavaアプリケーションを、javaコマンド一発で実行できるようになるというのも夢ではない。