Mavenプロジェクトをモジュール化する

「pom.xmlの継承(共有)」や「プロジェクトフォルダの乱立を防ぐ」などメリットが多いので、使っていない場合は検討することをお勧め。

モジュール化を検討する

プロジェクトが大きくなるにつれ、1つのプロジェクトだけで管理するのが難しい。

例えばWebアプリケーションを作成中、バッチも必要になったとする。Webとバッチを混在させるのも範囲が広すぎるので、別プロジェクトにしたい。このとき新規に別プロジェクトにしてしまうと、jarのバージョンや共有したい設定も別々に管理しなければならない。

そんなときはMavenプロジェクトのモジュールにすることを検討する。

親プロジェクトをpomタイプで定義して、その他のプロジェクトはそのモジュールとして作成する。こうすることでプロジェクトを乱立させることなく分割できる。さらにモジュール化による他のメリットも受けられる。

Mavenモジュール化概要図

モジュール化のメリット

やみくもに新規プロジェクト化するよりメリットが多い。

  • 依存関係の共有

  • 一括ビルド

  • モジュール間の参照と循環参照の防止

親子間におけるpom.xmlの継承により依存関係の共有が可能になる。Javaや各ライブラリのバージョンを親プロジェクトのpom.xmlを書き直すだけで、全ての子プロジェクトに反映させられる。あるモジュールだけ微妙にバージョンが違うといったようなことがなくなる。また各プロジェクトもpom.xmlを持っているので、必要なjarのみ使うようにできる。

ビルドについては、親プロジェクトをビルドすると子プロジェクトもビルドされる。よっていくつもビルドバッチを作成する必要がなくなる。

各モジュール間は参照可能だが循環参照をするとビルドが通らなくなる。これをうまくとらえると、参照の方向が一定していないといけないので、ドメイン層やDAO層をモジュール化して他の層を参照しないことを強制したりという使い方も可能。

手順

親プロジェクトを作成し、その下に子モジュールをたくさんという形になるので次の順に作成する。

  • 親プロジェクトをpomタイプで作成する。

  • 親モジュールを指定する形で、子モジュールを作成する。

操作例

Eclipseでの操作例はつぎのとおり。

Mavenプロジェクトウィザードで「pom」タイプを指定して、親プロジェクトを作成。

Mavenモジュール化手順01

Mavenモジュール化手順02

Mavenモジュール化手順03

Mavenモジュールウィザードで親プロジェクトを指定して、子モジュールを作成。

Mavenモジュール化手順04

Mavenモジュール化手順05

Mavenモジュール化手順06

モジュール化後のプロジェクト構成

モジュール化後のプロジェクトは次のような配置になる。

Mavenモジュール化後プロジェクト構成