倭マン's BLOG

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

POM ファイルを書こう! 其ノ壱 - POM ファイルの基本

前回までで、Maven2 のインストール方法や使い方を見てきました。 次は POM ファイル(以下、pom.xml)の書き方、カスタマイズの仕方を見ていきます*1一覧)。

ちなみに “POM”とは Project Object Model の略で、プロジェクトのオブジェクト・モデル(説明になってない?)のことです。

サンプル


とりあえず、pom.xml の単純なサンプルを見てみましょう。

<?xml version="1.0"?>
<project 
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
        http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sample</groupId>
  <artifactId>sample</artifactId>
  <version>0.0.1</version>
</project>

▲<project> 要素に付いている属性(と名前空間宣言)はなくても良いようです(以降では省略)。

シンプルな pom.xml の各要素


上記サンプルの <project> 要素下にある各要素を見てみましょう。

modelVersion
子テキストはモデルのバージョンを指定しますが、現在は“4.0.0”しかありません。
groupId
開発しているグループの ID です。
artifactId
成果物の ID です。 この ID 名は、成果物(jar ファイルなど)の名前に使われます。
version
成果物のバージョンです。

groupId, artifactId, version の3つ組を使って成果物を一意的に指定することが出来ます。 maven を使ってプロジェクト・テンプレートを生成したときや、m2eclipse を使って pom.xml を生成したときにも、これらの情報が必要でした。 他の成果物への関連(依存性や継承など)を指定する際にも、これら3つ組で対象となる成果物を指定します。

ライブラリへの依存性を付加する


Maven2.0 の有難味を味わえる1つとして、「pom.xml に少々要素を書き加えるだけで、(公開されている)ライブラリを自動的にダウンロードして自分のプロジェクトで使える」ことがあります。 まぁ、とりあえずサンプルを見てみましょう:

サンプル


とりあえず、pom.xml の単純なサンプルを見てみましょう。 ここでは、ロギング・コンポーネントcommons-logging への依存性を付加してみましょう。

<?xml version="1.0"?>
<project>
  ...
  <dependencies>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1</version>
    </dependency>
  </dependencies>
</project>

pom.xml の書き方


他のライブラリに対する依存性は「project/dependencies/dependency」要素で行います。 複数の依存性を書くためには、<dependency> 要素を付加したいライブラリ数だけ書きます。 成果物を指定するためには、少なくとも上に示した成果物を指定する3つ組(groupId, artifactId, version)が必要です。 いろいろなライブラリに対してこれらの3つ組を探す方法は後で書きます。

<dependency> 要素下には、この3つ組以外にも、通常 <scope> 要素を書きます。 他に <optional> 要素も書けます。 これらは次回以降に。

ライブラリの3つ組を探す


m2eclipse を使って検索する

一番簡単な方法は、m2eclipse をインストールして、その検索機能を使って依存性を付加する方法です。

しかし、ライブラリ名に数字が入っていると(log4j, dom4j 等)、検索にかからない*2って問題があります。

あと、maven コマンドで生成したプロジェクト・テンプレートを Eclipse 上に読み込んで開発している場合、

1. m2eclipse で依存性を追加
2. プロジェクトのルート・フォルダで maven eclipse:eclipse コマンドを実行
3. Eclipse 上でプロジェクトをリフレッシュ

という手順を踏まないと依存性が設定されない場合があります。

特定のサイトから検索する

公式には、Maven2 のセントラル・リポジトリから artifactId と version を元に pom.xml ファイルを探せば、その中に groupId, artifactId, version が記述されています。

しかしこれは結構面倒くさいので、MVN Repository を使って検索すると良いでしょう。 

“オブジェクト・モデル”


Maven2 ではプロジェクトをオブジェクト・モデルとして扱います。 オブジェクト・モデルとして扱うメリットとしては、継承(Inheritance)と集約(Aggregation)を用いて他のプロジェクトの設定を再利用できることです。 詳しくは次回以降に見ていきます。

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

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

*1:詳しくは、http://maven.apache.org/pom.html もしくは『[asin:477412964X:title]』を参照のこと。

*2:バージョン 0.0.9 現在。