3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Java Silver SE11 11章

Posted at

Java Silver SE11 11章

黒本をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。

モジュール

複数のパッケージをまとめて管理する単位のこと。
モジュール内のパッケージは、明示しなければ非公開パッケージとなり、パッケージに含まれるクラスがpublicであったとしても、外部のモジュールからアクセスできなくなる。

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

標準クラスライブラリなど、あらかじめ用意されているライブラリを提供しているモジュールのこと。
例として、java.langやjava.util, java.ioパッケージなどをまとめているのが、java.baseモジュールである。このモジュールは自動的に読み込まれる。

module-info.java

対象のモジュールの設定内容を記載するファイルに該当する。
下記2点を記述する。

  • どのパッケージを公開するのか
  • 他のどのモジュールを使用するのか

モジュール用のディレクトリにこのファイルを作り、他のソースファイルとコンパイルすることで、モジュールを作成できる。

testモジュールのmodule-info.java
module test {}

moduleの後に、モジュール名を記述し、公開するパッケージや利用する外部モジュールを「{}」内に記述する。
(何も書かない場合、全てのパッケージを公開せず、どの外部モジュールも利用しないことを意味する。)

パッケージの公開と他モジュールの利用
module test {
  exports com.sample;  // 公開するパッケージ
  requires hello;     // 利用する他のモジュール
}

推移的な依存関係

module1 → module2 → module3
上記なような推移的な依存関係を表した「モジュールグラフ」がある。
これはmodule1はmodule2に依存し、module2はmodule3に依存していることを示している。

「この依存関係」かつ「module1がmodule3のクラスを利用する」ためには、各module-info.javaを以下のように書く。

module1 module-info.java
module module1 {
  requires module2;  
}
// module1はmodule2を利用できる
module2 module-info.java
module module2 {
  requires transitive module3; 
}
// module2はmodule3を利用できる
// 「transitive」により、module1はmodule3を利用できる

ディレクトリ構成

モジュールのルートディレクトリをtestとすると、module-info.javaはその配下に置く。

ディレクトリ構造
current
  |-src 
  |  |-test
  |    |-com
  |    |  |-sample
  |    |     |- Main.java
  |    |-module-info.java
  |-mods
    |-test

src:ソースファイルのルートディレクトリ
test:モジュールのルートディレクトリ
com:パッケージのルートディレクトリ
mods:コンパイルの出力先

構文

以下に試験対策として、構文を記述していく。

コンパイル

コンパイルするためのコマンド。

コンパイルの構文
javac -d クラスファイルの出力先ディレクトリ コンパイルするファイルパス
testモジュールのコンパイル
javac -d mods/test src/test/module-info.java src/test/com/sample/Main.java

module-info.javaも同時に、コンパイルを行うことに注意する。

クラスの実行

エントリーポイントを持つクラスを実行するためのコマンド。

クラス実行の構文
java --module-path モジュールのルートディレクトリ -m 実行したいモジュールのクラス
testモジュール実行
java --module-path mods -m test/com.sample.Main

jarコマンド

モジュールをjarコマンドで、1つにまとめることができる。
複数のクラスをまとめたjarファイルを作成する。

jarコマンドの構文
jar --create --file=jarファイル名 --main-class=エントリーポイントを持つクラス -C jarファイルに含めるファイルがあるディレクトリ
jarコマンドの例文
jar --create --file=mlib/test.jar --main-class=com.sample.Main -C mods/test

解説

mlibディレクトリにtest.jarファイルを新規作成する。
エントリーポイントを持っている「com.sample.Main」を指定する。
mods/testディレクトリ内にあるファイルが含まれる。
最終的に、mlib/testディレクトリにtest.jarファイルが作成される。

モジュールの設定情報確認

module-info.javaに設定したモジュールの情報を確認するためのコマンドがある。

設定情報確認
java --describe-module
jmod describe

非公開パッケージの一時利用

module-info.javaにてexportsされていないパッケージを、一時的に利用してコンパイルすることができる。この時javacコマンドのオプションを使用する。

一時利用
-add-exports
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?