Project Jigsawの4回目となる今回は、APIの公開について紹介します。前回は、モジュールの依存性について紹介しました。今回は、公開範囲の設定など、公開に関してもう少し詳しく解説していきましょう。

公開範囲の設定

 前々回、モジュールの定義とパッケージの公開範囲の設定について簡単に紹介しました。

 簡単におさらいすると、モジュールの定義はmodule-info.javaに、module文を使用して定義します。パッケージを公開する場合は、exports文でパッケージを指定するようにします。

 例えば、net.javainthebox.fooモジュールがnet.javainthebox.barパッケージを公開する場合、module-info.javaはリスト1のようになります。

  

リスト1●net.javainthebox.fooモジュールの定義

module net.javainthebox.foo {
    exports net.javainthebox.bar;
}

  

特定のモジュールにのみ公開

 複数のモジュールから構成されているアプリケーションの場合、あるモジュールをアプリケーション内だけで使用したいことがあるかもしれません。例えば、内部用の実装なので、外部に公開したくない場合などがこれに相当します。

 このような場合、exports文で公開するパッケージを、特定のモジュールに限定することが可能です。例えば、リスト1のnet.javainthebox.barパッケージを、net.javainthebox.bazモジュールとnet.javainthebox.quxモジュールだけに公開する場合、リスト2のように記述します。

  

リスト2●特定のモジュールだけにパッケージを公開する

module net.javainthebox.foo {
    exports net.javainthebox.bar to net.javainthebox.baz, net.javainthebox.qux;
}

  

 exportの後にパッケージを指定するところまで同じですが、その後に赤字で示したtoと公開するモジュールをカンマ区切りで列挙していきます。このように記述することで、toの後に指定したモジュールにだけパッケージを公開できます。それ以外のモジュールから、このパッケージにアクセスすると、IllegalAccessError例外がスローされます。

 リスト2に示したmodule-info.javaをコンパイルする場合、モジュールパスにパッケージを公開するモジュールが配置されている必要があります。公開先のモジュールが存在しない場合、コンパイルエラーになります。このことから、module-info.javaのコンパイル時に、公開先のモジュールの有無をチェックしていることが分かります。

この先は会員の登録が必要です。今なら有料会員(月額プラン)が2020年1月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら