モジュールとは
複数のパッケージをまとめて管理する単位のことを『モジュール』と呼ぶ。パッケージ単位の情報隠蔽を実現するのがモジュールシステムの目的である。
モジュール作成
モジュール用のディレクトリを作成し、そのディレクトリにmodule-info.javaというファイルを作り、その他のソースファイルとコンパイルする。
module-info.javaには、以下の2点を記述する。
・どのパッケージを公開するか
・ほかのどのモジュールを使うか
command
module test {
exports com.test; //exports パッケージ名
requires foo; //requires モジュール名
}
モジュール化(コンパイル)
モジュール化するには、module-info.javaとソースファイルをコンパイルする。コンパイル時には、javacコマンドの-dオプションを使う。
<構文>
commandjavac -d クラスファイルの出力先ディレクトリ コンパイルするファイルのパス
<例>
commandjavac -d mods/test src/test/module-info.java src/test/com/sample/Main.java
モジュールの実行
モジュールの実行には、javaコマンドの--module-pathオプションでモジュールを探すためのモジュールパスを指定し、-mオプションで実行したいクラスを指定する。
<構文>
commandjava --module-path モジュールのルートディレクトリ -m 実行したいモジュールのクラス
<例>
command
java --module-path mods -m test/com.sample.Main
//testモジュールのcom.sample.Mainクラスを実行
※ モジュールはjarコマンドで1つにまとめることができる。
<構文>
command
jar --create --file=jarファイル名 --main-class=エントリーポイントを持つクラス -C jarファイルに含めるファイルがあるディレクトリ
<例>
command
jar --create --file=mlib/test.jar --main-class=com.sample.Main -C mods/test
モジュールの情報を確認する
javaコマンドの--describe--moduleオプション
モジュールの説明を表示するためのコマンド
<例>
command
>java --module-path mods --describe-module test
test file://Users/kuma/top/java/mods/test/
exports com.sample
requires java.base mandated
jmodコマンドのdescribeモード
JMODファイル形式モジュールファイルを扱うためのコマンド。JMODファイルにクラスファイルなどをまとめ、1つのモジュールとして提供することができる。
<例>
command>java create --classpath mods /test test.jmod >jmod describe test.jmod exports com.sample requires java.base mandated
依存関係を調べる
jdepsコマンドを使用する。
<例>
command>jdeps --list-deps hello.jar java.base
プログラム実行時の依存モジュール
javaコマンドの--show-module-resolutionオプションを使用し、プラグラム実行時に依存するモジュールがどのように探されているか表示することができる。
<例>
command>java --module-path mods --show-module-resolution -m test/com.sample.Main root test file://... test requires foo file://... java.base binds java.management 以下省略
非公開パッケージを一時的に公開する
javacコマンドの--add-exportsオプションでコンパイルすることで、非公開パッケージを一時的に公開することができる。
<例>
command> javac -d mods/test --module-path mods/ \ > --add-exports test/com.hello=test \ //対象のモジュール/公開するパッケージ=利用するモジュール > src/test/module-info.java src/test/com/sample/Main.java