バージョン

自分のモジュール、または依存関係にあり、インポートする必要のあるモジュールにもバージョンを指定することができる(必須ではない)。また、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コマンド一発で実行できるようになるというのも夢ではない。