LoginSignup
2
1

【JavaGold】モジュールシステムの移行方法

Posted at

概要

既存のライブラリを最新のモジュールシステムに移行させる方法として以下の2つがある。

  1. ボトムアップ移行
  2. トップダウン移行

ボトムアップ移行

複数のライブラリがあった時、依存関係の末端側(最も依存されている側)から順に名前付きモジュールに変換していく。

例えば、モジュール化されていない以下3つの既存ライブラリがクラスパス上にあったとする。

クラスパス
com-sample-a.jar(無名モジュール)
↓(依存)
com-sample-b.jar(無名モジュール)
↓(依存)
com-sample-c.jar(無名モジュール)

上記のような依存関係にあるアプリケーションをJava 9以降で利用すると、全て無名モジュールとして扱われる。
(無名モジュールの特徴は、全てのモジュールに対して依存関係を持つ)

上記の場合、末端から移行作業を始めるため、com-sample-c.jarから始める。

移行作業の流れ

①:com-sample-c.jar内のどのパッケージが利用されているのかを調べる。
②:そのパッケージのみを公開するようにモジュール宣言を追加する。
③:モジュール宣言を含む必要なファイルをjarファイルにまとめ直して名前付きモジュールにする。
④:他のライブラリについても①〜③を実施する。

トップダウン移行

クラスパスの末端にあるライブラリがメンテナンス中であるなどの理由でモジュール化できない場合に使用する。

例えば、モジュール化されていない以下3つの既存ライブラリがクラスパス上にあったとする。

クラスパス
com-sample-a.jar(名前付きモジュール)
↓(依存)
com-sample-b.jar(名前付きモジュール)
↓ ×(アクセスできない)
com-sample-c.jar(無名モジュール)

この時、モジュール化するライブラリの順番に注意する。

com-sample-a.jarcom-sample-b.jarを先にモジュール化してしまうと、com-sample-c.jarにアクセスできない問題が発生する。
(名前付きモジュールから無名モジュールにはアクセスできないため)

この問題は、無名モジュールを自動モジュールにすることで解決できる。
(自動モジュールは、他のすべての名前付きモジュールを読み取り(requires)されるように作成されるため)

移行作業の流れ

①:com-sample-c.jarを自動モジュールにする。
②:自動モジュールにしたメンテナンス中のモジュールに適切なモジュール宣言を追加する。
③:jarファイルにまとめる。

トップダウン移行では、依存されている側のライブラリを一旦自動モジュールにすることで、システム全体をモジュールシステムに適合させていく。

2
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
2
1