見出し画像

JavaSilverに向けて⑭ モジュール

・モジュールとは


パッケージを束ねる単位。
モジュールを利用する事で、配下のパッケージに対するアクセス権限をより細かに設定できる。
モジュールを使う事で、どのパッケージを公開するか、他のどのモジュールに依存するかを定義する事ができる。

・モジュールの基本


モジュールを定義するには、モジュール定義ファイル(module-info.java)を配置する。
以下はjava.net.httpモジュールを利用する例。別のモジュールを利用する際はrequiresを使う。requires宣言なしでhttpモジュールにアクセスした場合は、エラーとなる。
module hello {
    requires java.net.http;
}

・requires transitive宣言


以下の場合、s1はs2モジュール経由でjava.net.http/java.sqlモジュールに依存しているが、s1でこれらのモジュールをrequires宣言する必要はない。
module s1 {
    requires s2;
}
module s2 {
    requires transitive java.net.http;
    requires transitive java.sql;
}

・モジュールの実行


コンパイル後にjavaコマンドでモジュールクラスを実行するには以下のコマンドを使う。
java —module-path モジュールのルートディレクトリ -m 実行したいモジュール
*モジュール名と実行したいクラスは/で区切る。

・モジュールをjar1つにまとめるコマンド


jar --create --file=jar ファイル名 --main-class=エントリーポイントを持つクラス -C jarファイルに含めるファイルがあるディレクトリ

・モジュールの情報を確認するためのコマンド


そのモジュールがどのパッケージを公開しているか、また、どのモジュールに依存しているかがわかる。
1、javaコマンドの--describe-moduleオプション
2、jmodコマンドのdescribeモード

・非公開のパッケージを公開するためのコマンド
javac ~ --add-exports

・モジュールグラフ


モジュール間の依存関係を表現した図を「モジュールグラフ」という。

・プラットフォームモジュール


標準クラスライブラリーなども、モジュールシステムが登場した事によってモジュールとして提供されるようになった。
これらの事を「プラットフォームモジュール」という。
java.langパッケージ、java.utilなどがjava.baseモジュールとしてあらかじめ提供されている。
そのため、java.baseモジュールで提供されている。java.baseモジュールに関しては明示的にrequires宣言しなくても自動的に読み込まれている。

この記事が気に入ったらサポートをしてみませんか?