![見出し画像](https://assets.st-note.com/production/uploads/images/41727532/rectangle_large_type_2_9cbb68c6b3188683ae1699dd81d0b54a.png?width=1200)
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宣言しなくても自動的に読み込まれている。