LoginSignup
0
0

(java silver) モジュール

Posted at

moduleとは

  • パッケージを束ねるためのもので配下パッケージの権限を細かく設定できる
  • モジュールの実行
java --module-path(-p) モジュールのルートディレクトリ --module(-m) モジュール名/モジュールのクラス
  • ほかのモジュールを利用する際はrequires宣言
module A {
  requires java.net.http;
}
  • modul1が利用しているmodul2が利用しているmodul3をmodul1が利用したいときにはmodul1でrequiresする必要はなくmodul2でrequires transitiveを使用しmodul3を宣言する
module modul1 {
  requires mod2;
}
-----------------------------------------------
module mod2 {
  requires transitive module3;
}
  • モジュールは以下のパッケージはデフォルトでモジュールプライベート(モジュールの外からはアクセスできない)とみなされ、モジュールの外からアクセスを許可するにはexportsで公開したいパッケージを宣言する
module mynavi {
  exports com.example.B;
}

特定のモジュールに対してのみのパッケージを公開したいならばexports…to宣言を使用する

自動モジュール

  • 非モジュールとモジュール前提のコードが混在していても非モジュールをモジュールとして扱えるようにするための仕組み
  • モジュールパスに配置されたjarファイルでモジュール定義ファイルを持たないコードは自動モジュールとみなされる

無名モジュール

  • モジュール定義を持たないjarファイルがモジュールパスではなくクラスパスから読み込まれた場合は無名モジュールとなる
  • module.info.javaはなく外部に公開され、すべてのモジュールグラフ上のモジュールをrequirsしている

モジュールのコンパイル

javac -d [クラスファイルの出力先ディレクトリ] [モジュール用に配置したファイルパス][コンパイルするファイルのパス]

モジュールの情報の確認

  1. --describe-module
  2. jmod describe
java --module-path [モジュールのルートディレクトリ] --describe-module[モジュール名]

jmod describe [JMODのパス]

クラスモジュール依存関係の確認

  1. jdeps
  2. -show-module-resolution
jdeps --list-deps[JARファイルのパス]

java --module-path [モジュールディレクトリ] -m [モジュール名/モジュールのクラス名] -show-module-resolution

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

javac -d [クラスの出力先ファイルの出力先ディレクトリ] --module-path[モジュールのルートディレクトリ] --add-exports [対象のモジュール/公開するパッケージ=利用モジュール] [module.info.javaのパス] [コンパイルするファイルパス]

[.]もしくは[.¥]「自分がいるディレクトリ(フォルダ)」を表す
[..]もしくは[..¥]「自分がいるディレクトリの一階層上のディレクトリ」を表す

0
0
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
0
0