Skip to content
閲覧中:
1. モジュール定義

1. モジュール定義

Java SE 11 Goldにおいて、モジュールシステム(Project Jigsaw)はもっとも配点が高く、かつ実務で馴染みが薄いため「最大の壁」になりやすい分野です。

試験対策として押さえるべきポイントを**「定義の書き方」「コマンド」「ルール」**の3点に絞って解説します。


1. モジュール定義 (module-info.java) の構文

モジュールのルートディレクトリに配置する module-info.java の記述ルールが頻出です。以下の5つのキーワードを区別できるようにしましょう。

  • requires: 依存するモジュールを指定(**モジュール名**を指定)。
  • exports: 外部に公開するパッケージを指定(**パッケージ名**を指定)。
  • requires transitive: 「依存の再エクスポート」。AがBをtransitiveでrequiresしている場合、Aを利用するCは、自動的にBにもアクセスできるようになります。
  • opens: リフレクション(実行時の型操作)によるアクセスのみを許可する。
  • provides ... with ...: サービス・インターフェースの実装を提供する場合に使用。

2. 覚えておくべき3つの重要ルール

試験では「コードを見て、コンパイルエラーになるか実行時例外になるか」を問われます。

  1. 読み取り可能性(Readability): 自分が requires していないモジュールのクラスは使えません。
  2. アクセスコントロール: public クラスであっても、そのパッケージが exports されていない限り、他のモジュールからは見えません。
  3. 推移的依存(Transitive Dependency):
    • requires A; だけでは、Aが依存しているBにはアクセスできません。
    • Aが requires transitive B; と書いていれば、自分もBにアクセスできます。

3. コマンドライン・オプション

SE 11 Goldでは、コマンドの問題も出題されます。特に以下のパスの違いに注意してください。

Text Only
* **`--module-path` (または `-p`)**:

コンパイル済みモジュール(.jmod.jar)が置いてある場所を指定します。従来の classpath に代わるものです。 * --module (または -m): 実行するメインモジュールとクラスを指定します(例: java --module-path mods -m my.module/com.example.Main)。 * jdeps: クラスやJARファイルがどのモジュールに依存しているかを解析するツールです。


4. 特殊なモジュール

Text Only
* **java.base**: すべてのモジュールが自動的に `requires` している基本モジュール(`java.lang` などを含む)。

* **名前なしモジュール (Unnamed Module)**:

クラスパス上に配置されたJARやクラスが属する場所。すべてのモジュールにアクセスでき、すべてのモジュールから(従来のクラスパス方式として)アクセス可能です。

Text Only
* **自動モジュール (Automatic Module)**:

モジュール化されていない既存のJARファイルを --module-path に置くと、ファイル名に基づいた名前のモジュールとして扱われます。


よく出る「ひっかけ」パターン

「AモジュールがBパッケージを exports しているが、利用側のCモジュールが requires を書き忘れている」というパターンが非常に多いです。**「出す(exports)側」と「入れる(requires)側」の両方が揃っているか**を必ず確認してください。

次は、具体的に「requires transitive」などの挙動をコード例で詳しく見てみますか?それとも、別の頻出分野(並列処理など)に進みますか?