モジュール

JSR-277には、「モジュールとは、カプセル化の単位である」という記述が見られる。これが表すところは、「モジュール単位のアクセス制御が行える」「依存関係をモジュール単位で指定する」といったことができるようになるということだ。

JAMファイルフォーマット

まず先に、モジュールが物理的にどう表現されるかという面からみていこう。先ほども述べたように、モジュールはJAMファイルというファイル形式で表される。

その正体は「モジュール用のメタデータを追加したJAR形式のファイル」だ。具体的には、「/MODULE_INF/METADATA.module」というファイルがそのメタデータであり、前述のアクセス制御や依存関係はここに記述されるわけだ。

JAMファイルの名称は任意であるが、以下の命名規約に則ることが望ましいとされている。

<モジュール名>-<バージョン>[-<プラットフォーム>-<アーキテクチャ>].jam

プラットフォームやアーキテクチャの指定は省略可能だ。モジュール名とバージョンについては後述する。

また、レガシーなJARファイルやネイティブライブラリも、JAMファイルとしてパッケージングすることが可能だ。まず、レガシーなJARファイルはJAMファイル内で以下のように配置する。

/MODULE-INF/lib/<レガシーなJARファイル(複数)>

JARファイルは複数置けることに注意。つまり、古いライブラリをセットにして、一つのモジュールにしてしまうことも可能だということだ。

ネイティブライブラリは、JAMファイル内で以下のように配置する。

/MODULE-INF/bin/<プラットフォーム>/<アーキテクチャ>/<ネイティブライブラリ(複数)>

これをまとめると、まず、クラスx.y.Zを含むJAMファイル「example-1.0.0.jam」は画像1のように、クラスx.y.Zと、レガシーJARファイルregacy.jar、ネイティブライブラリnative.dllを含むJAMファイル「example-2.0.0-windows-x86.jam」は、画像2のようになる。

画像1: クラスx.y.Zを含むJAMファイル

画像2: クラスx.y.Zと、レガシーJARファイルregacy.jar、ネイティブライブラリnative.dll