pom.xml

POM (Project Object Model)とは、MavenプロジェクトをXMLで表現したものである。POMはpom.xmlという名前のファイルに保存される。

POMの要素

POMの要素を次に示す。

pom.xml
Figure 1. pom.xml

pom.xmlの例を示す。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.segakuin</groupId>
  <artifactId>foo</artifactId>
  <packaging>jar</packaging>
  <version>1.0.0</version>
  <name>Example Project</name>
  <url>https://segakuin.com</url>
</project>

project

projectはPOMのルート要素である。

<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/xsd/maven-4.0.0.xsd">
</project>

属性

次に示す属性を project 要素に指定できる。

xmlns
POM の名前空間 (namespace) を指定する。
xmlns:xsi
XMLスキーマの名前空間を指定する。任意のプリフィクス(接頭辞)を指定できるが、xsi とすることが多い。
xsi:schemaLocation
スキーマのロケーションを指定する。プリフィクスは xmlns 属性で指定したものにする。

子要素

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.segakuin</groupId>
  <artifactId>example</artifactId>
  <version>1.0</version>
  <dependencies>
  </dependencies>
</project>

親要素

なし

modelVersion

POM (Project Object Model) のバージョンを表す。必須要素で省略できない。

子要素

POM のバージョンをテキストで指定する。現在指定できるバージョンは 4.0.0 のみである。

<modelVersion>4.0.0</modelVersion>

親要素

project

groupId

プロジェクトを一意に識別する名前で、プロジェクトのルートパッケージ名を指定するのが一般的である。必須要素で省略できない。

子要素

グループIDをテキストで指定する。

<groupId>com.segakuin</groupId>

親要素

project

artifactId

プロジェクトの成果物の名前。作成するJAR、WAR又はEARファイルなどの名前に使用される。必須要素で省略できない。

子要素

アーティファクトIDをテキストで指定する。

<artifactId>example</artifactId>

親要素

project

version

プロジェクトのバージョンを表す。必須要素で省略できない。

子要素

バージョンをテキストで指定する。

<version>1.0</version>

親要素

project

packaging

作成するパッケージングのタイプ。jar(デフォルト)、warearなどがある。

dependencies

プロジェクトが依存するライブラリ群。

<dependencies>
  <dependency>
  </dependency>
</dependencies>

親要素

project

子要素

dependency

プロジェクトが依存するライブラリの情報。

<dependency>
  <groupId>com.segakuin</groupId>
  <artifactId>example</artifactId>
  <version>1.0</version>
  <type>jar</type>
</dependency>

親要素

dependencies

子要素

type

依存関係のタイプを表す。デフォルト値は jar である。

子要素

依存関係のタイプをテキストで指定する。

<type>jar</type>

親要素

dependency

scope

scope要素には、依存するライブラリがいつクラスパスに追加されるかを指定する。

子要素

次に示す列挙子のいずれかをテキストで指定する。

compile
全ての状況でクラスパスに追加される。(デフォルト値)
<scope>compile</scope>
provided
コンパイル時のみクラスパスに追加される。ライブラリがJDKやコンテナによって提供される場合に指定する。servlet-api.jarのような実行環境で提供されるライブラリに対して指定する。
<scope>provided</scope>
runtime
通常の実行及びテストの実行の時にクラスパスに追加される。実行時のみに必要な場合に指定する。JDBCドライバのような、実行するときだけ必要となるライブラリに対して指定する。
<scope>runtime</scope>
test
テストのコンパイルと実行の時にクラスパスに追加される。テストのときのみ必要な場合に指定する。
<scope>test</scope>
system
明示的にクラスパスに追加する場合に指定する。このスコープのライブラリは常に有効であるとみなされ、リポジトリの検索は行われない。
<scope>system</scope>

親要素

dependency

name

プロジェクトの表示名。ドキュメントを作成するときなどに使用される。

url

プロジェクトのサイトのURL。ドキュメントを作成するときなどに使用される。

子要素

プロジェクトのホームページのURLをテキストで指定する。

<url>https://segakuin.com/</url>

親要素

build

<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
</build>

参考文献

The Apache Software Foundation (2022) Introduction to the POM

The Apache Software Foundation (2022) POM Reference