pom.xml
別名: POM / Project Object Model / Maven の設定ファイル
pom.xml は Maven のプロジェクト設定を書く XML ファイルで、POM(Project Object Model)とも呼ぶ。
座標、依存、プラグインを宣言し、mvn は実行したディレクトリの pom.xml を読んでからビルドする。
公開:
定義
pom.xml は Maven のプロジェクトを定義する XML ファイルである。
中身は POM(Project Object Model)と呼ばれ、Maven がビルドするときの最小単位になる。mvn package のようにゴールやフェーズを実行すると、Maven はカレントディレクトリの pom.xml を読み、その設定に従って動く。
詳細
公式ドキュメント(新しいタブで開く)によると、必須の要素は project・modelVersion・groupId・artifactId・version の 5 つである。groupId・artifactId・version の組は座標と呼ばれ、成果物を一意に指す。
依存ライブラリは dependencies に、使うプラグインと設定は build の下に書く。
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
</project>書いていない設定は、Maven が内蔵する Super POM から引き継ぐ。packaging を省くと jar になり、依存の取得先も既定で Maven Central になる。parent を書けば別の POM から設定を継承できる。
よくある誤解
Maven は親ディレクトリへさかのぼって pom.xml を探さない。src の中やリポジトリのルートで mvn を打つと、there is no POM in this directory で止まる。
別の場所から動かすときは、-f で pom.xml のパスを渡す。
pom.xml があっても、mvn だけを打つと何も実行されない。
実行するフェーズかゴールを渡さないと No goals have been specified for this build になる。
関連
Gradle で同じ役割を持つのは build.gradle である。
Node.js の package.json や Go の go.mod も、プロジェクトのルートに置いて依存を宣言するファイルにあたる。