できない.dev

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 も、プロジェクトのルートに置いて依存を宣言するファイルにあたる。