今回は POM ファイルが「Project Object Model」であることの意味の1つ、POM ファイルの継承(Inheritance)を見ていきましょう(一覧)。
どんなときに使う?
POM ファイルの継承によって、(通常のオブジェクト指向設計にあるように)複数の POM ファイルに重複したコード(設定)を1つの継承元の POM ファイルに集約することができます。 これによって、設定の管理が容易になります。
ちなみに、継承されるのは「プロジェクトの設定(もしくは環境)」であって、「プロジェクト」*1や「プロジェクトの成果物」ではありませんので。 念のため。
どう使う?
手順は以下の通り:
- 親プロジェクトを作成する
- 親プロジェクトを(ローカル・リポジトリへ)インストールする
- 子プロジェクトの POM ファイルで親プロジェクトを指定する
1. 親プロジェクトを作成する
親プロジェクトとなるのは、成果物が POM ファイルだけのプロジェクトです。 この POM ファイルは、基本的には通常の POM ファイルと同じですが、packaging を pom に指定する箇所だけが異なります:
<project> <modelVersion>4.0.0</modelVersion> <groupId>org.sample</groupId> <artifactId>parent-sample</artifactId> <version>1.0</version> <!-- <packaging> を指定する --> <packaging>pom</packaging> </project>
2. 親プロジェクトをインストールする
親プロジェクトをローカル・リポジトリへインストールする方法は、通常のプロジェクトのインストール方法と同じです。 コマンド・プロンプトを立ち上げ、親プロジェクトのルートフォルダ上へ移動して、以下のコマンドを実行して下さい:
mvn install
3. 子プロジェクトの POM ファイルで親プロジェクトを指定する
親プロジェクトの指定の仕方は、「project/parent」要素で行います。 そこで設定するものは、成果物を一意的に識別する3つ組、groupId, artifactId, version です:
<project> <!-- ここで親プロジェクトを指定 --> <parent> <groupId>org.sample</groupId> <artifactId>parent-sample</artifactId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>sample</artifactId> </project>
どう処理される?
POM Reference によると、親 POM に定義されている以下の要素が、子 POM に受け継がれるとあります:
- dependencies
- developers and contributors
- plugin lists
- reports lists
- plugin executions with matching ids
- plugin configuration
ただし、その他にも
- groupId
- version
が受け継がれるようです*2。 一方、packaging は継承されません。 子 POM で何も指定しなければ、jar が設定されていると見なされます。
Super POM
Java ではすべてのオブジェクトが java.lang.Object を継承しているのと同様、任意の Maven2 プロジェクトの POM ファイルは1つの特定の POM ファイル「super POM」を継承しています。
repositories や build 等の設定のデフォルト値は、この「super POM」に設定されている値になっています。
Apache Maven 2.0入門 Java・オープンソース・ビルドツール
- 作者: 野瀬直樹,横田健彦
- 出版社/メーカー: 技術評論社
- 発売日: 2006/12/13
- メディア: 大型本
- 購入: 8人 クリック: 141回
- この商品を含むブログ (97件) を見る