概要
既存のライブラリを最新のモジュールシステムに移行させる方法として以下の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.jar
とcom-sample-b.jar
を先にモジュール化してしまうと、com-sample-c.jar
にアクセスできない問題が発生する。
(名前付きモジュールから無名モジュールにはアクセスできないため)
この問題は、無名モジュールを自動モジュールにすることで解決できる。
(自動モジュールは、他のすべての名前付きモジュールを読み取り(requires
)されるように作成されるため)
移行作業の流れ
①:com-sample-c.jar
を自動モジュールにする。
②:自動モジュールにしたメンテナンス中のモジュールに適切なモジュール宣言を追加する。
③:jar
ファイルにまとめる。
トップダウン移行では、依存されている側のライブラリを一旦自動モジュールにすることで、システム全体をモジュールシステムに適合させていく。