moduleとは
- パッケージを束ねるためのもので配下パッケージの権限を細かく設定できる
- モジュールの実行
java --module-path(-p) モジュールのルートディレクトリ --module(-m) モジュール名/モジュールのクラス
- ほかのモジュールを利用する際はrequires宣言
module A {
requires java.net.http;
}
- modul1が利用しているmodul2が利用しているmodul3をmodul1が利用したいときにはmodul1でrequiresする必要はなくmodul2でrequires transitiveを使用しmodul3を宣言する
module modul1 {
requires mod2;
}
-----------------------------------------------
module mod2 {
requires transitive module3;
}
- モジュールは以下のパッケージはデフォルトでモジュールプライベート(モジュールの外からはアクセスできない)とみなされ、モジュールの外からアクセスを許可するにはexportsで公開したいパッケージを宣言する
module mynavi {
exports com.example.B;
}
特定のモジュールに対してのみのパッケージを公開したいならばexports…to宣言を使用する
自動モジュール
- 非モジュールとモジュール前提のコードが混在していても非モジュールをモジュールとして扱えるようにするための仕組み
- モジュールパスに配置されたjarファイルでモジュール定義ファイルを持たないコードは自動モジュールとみなされる
無名モジュール
- モジュール定義を持たないjarファイルがモジュールパスではなくクラスパスから読み込まれた場合は無名モジュールとなる
- module.info.javaはなく外部に公開され、すべてのモジュールグラフ上のモジュールをrequirsしている
モジュールのコンパイル
javac -d [クラスファイルの出力先ディレクトリ] [モジュール用に配置したファイルパス][コンパイルするファイルのパス]
モジュールの情報の確認
- --describe-module
- jmod describe
java --module-path [モジュールのルートディレクトリ] --describe-module[モジュール名]
jmod describe [JMODのパス]
クラスモジュール依存関係の確認
- jdeps
- -show-module-resolution
jdeps --list-deps[JARファイルのパス]
java --module-path [モジュールディレクトリ] -m [モジュール名/モジュールのクラス名] -show-module-resolution
非公開パッケージの一時利用
javac -d [クラスの出力先ファイルの出力先ディレクトリ] --module-path[モジュールのルートディレクトリ] --add-exports [対象のモジュール/公開するパッケージ=利用モジュール] [module.info.javaのパス] [コンパイルするファイルパス]
[.]もしくは[.¥]「自分がいるディレクトリ(フォルダ)」を表す
[..]もしくは[..¥]「自分がいるディレクトリの一階層上のディレクトリ」を表す