倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

POM ファイルを書こう! 其ノ七 - POM ファイルの集約とマルチプロジェクト機能

今回は POM ファイルの集約(Aggregation)を見ていきましょう(一覧)。

どんなときに使う?


POM ファイルの集約によって、大きなプロジェクトを複数のモジュールに分割して開発を行えるマルチプロジェクト機能を使うことが出来ます。

個々のモジュールはそれぞれが1つの (Maven) プロジェクトになっているため、そのプロジェクト単体でビルド(コンパイルやテスト)を実行できます。

また、モジュールを包含しているプロジェクト(以下、統合プロジェクト*1)をビルドすることによって個々のモジュールも自動的にビルドされるため、統合的なビルドも簡単に行うことができます。

どう使う? 其ノ壱 - シンプルな使い方


まずはシンプルな使い方を。 注意するのは次の3点:

  • モジュールは、統合プロジェクトのルートフォルダ直下に通常の Maven2 プロジェクトとして作成する
  • 統合プロジェクトの POM ファイルは <packaging> を "pom" にする
  • 統合プロジェクト POM ファイルの <modules> 要素でモジュールとなる Maven2 プロジェクトを指定する

あと、とくに強制というわけではありませんが、各プロジェクトの groupId は同じにしておきましょう。

もう少し具体的に。 統合プロジェクトを union-sample、そのモジュールを sample-api, sample-impl の2つとしましょう。 このとき、プロジェクト全体のフォルダ構造は以下のようにします:


で、union-sample (統合プロジェクト)の POM ファイルは概ね以下のようにします:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sample</groupId>
  <artifactId>union-sample</artifactId>
  <version>1.0</version>
  <!-- <packaging> を指定する -->
  <packaging>pom</packaging>

  <!-- モジュールを指定する -->
  <modules>
    <module>sample-api</module>
    <module>sample-impl</module>
  </modules>
</project>

&module> プロジェクトで指定するのはサブフォルダ名です(artifactId ではなく)。 sample-api, sample-impl プロジェクトの POM ファイルは通常の Maven2 プロジェクトの POM ファイルと同じように書けば OK です。

どう使う? 其ノ弐 - 集約と継承を使う


基本的には集約と継承とは関係のない機能なので、親 POM ファイルと統合 POM ファイル(統合プロジェクトの POM ファイル)も関係のない概念です。 しかし(したがって?)、これらを同一の POM ファイルにすることもできます。 つまり、モジュールに共通したプロジェクトの設定を統合 POM ファイルに書くことができます。

では、上記の例を POM ファイルの継承を使うように書き換えてみましょう。


書き換えると言っても、実際に変更するのはモジュールの POM ファイルに <parent> 要素を付け加えるだけです:

<project>
  <parent>
    <groupId>org.sample</groupId>
    <artifactId>union-sample</artifactId>
    <version>1.0</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>sample-api</artifactId>
  <version>1.0</version>
</project>

sample-impl プロジェクトの POM ファイルも同様です。 統合プロジェクトの POM ファイルは変更の必要はありません。

この方法をとったときの注意を1つ。 モジュールのプロジェクトをビルドするためには、親ファイルである統合ファイルがローカル・リポジトリにインストールされていなければならないので*2、まず統合プロジェクトをローカル・リポジトリにインストールしましょう。

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

初めてのJavaScript

初めてのJavaScript

*1:これは正規の呼び名ではありません。 ここでの便宜上の呼び方です。

*2:「単純な例」の箇所のサンプルでは、統合プロジェクトをインストールしていなくてもモジュールをビルドできます