MENU

Maven — pom.xmlで支えるJavaビルドの定番

Maven アイキャッチ
Maven

Apache Mavenは2004年にApache Software Foundationが公開したJavaプロジェクト向けのビルド・依存管理ツールで、生みの親はJason van Zyl氏です。もともとはApache Turbineというフレームワークのビルドを統一する目的で構想され、Antよりも「規約に従えば何もしなくてもビルドできる」という思想を強く打ち出した点が画期的でした。pom.xml(Project Object Model)にプロジェクトの構成と依存を宣言するだけで、コンパイル・テスト・パッケージング・公開が一連の決まったライフサイクルで進む仕組みは、JavaやScala界の標準として今も広く支持されています。

目次

この記事の目次

  1. pom.xmlに集約された宣言的ビルド
  2. ライフサイクルとフェーズの仕組み
  3. Maven Centralと依存解決
  4. GradleやAntとの選び分け
  5. まとめ

pom.xmlに集約された宣言的ビルド

pom.xmlに集約された宣言的ビルド

Mavenプロジェクトの中心はpom.xmlで、ここにの3要素(GAV座標)を書くだけで成果物が一意に識別されます。依存はの中に書き、でcompile・test・providedといった有効範囲を切り替えます。親POMを継承する仕組みもあり、Spring Boot Starter ParentやJUnit BOMのように、共通の依存版数をまとめて管理する設計が成り立ちます。

ディレクトリ構成も規約で固定されており、src/main/java・src/test/java・src/main/resourcesに置けばmvn compileがそのまま動きます。「規約より設定」を反転した「設定より規約(Convention over Configuration)」の哲学が徹底されており、Antのように「どこに何を置くか」をスクリプトで指定する手間がありません。この一貫性のおかげで、初見のMavenプロジェクトでも構造を予測しやすく、巨大なオープンソース群で共通言語として機能しています。

ライフサイクルとフェーズの仕組み

ライフサイクルとフェーズの仕組み

Mavenにはdefault・clean・siteの3つのライフサイクルがあり、特にdefaultはvalidate → compile → test → package → verify → install → deployという一連のフェーズを順に通過します。mvn packageを実行するとpackageまでの全フェーズが順番に実行され、targetディレクトリにJAR・WAR・EARなどの成果物ができあがります。それぞれのフェーズに対しmaven-compiler-pluginやmaven-surefire-pluginといったプラグインがゴール(goal)を結びつける構造です。

プラグインの差し替えで挙動を変えられる一方、フェーズの順序自体は変更できないため再現性が保たれます。mvn deployまで通せばリモートのMavenリポジトリ(Sonatype Nexus・JFrog Artifactory・Maven Central)に成果物を公開でき、企業内ライブラリの配布も同じ仕組みで完結します。この一貫したライフサイクルこそが、Javaコミュニティで20年近く支持される理由のひとつです。

Maven Centralと依存解決

Maven Centralと依存解決

Maven Centralは2002年に開設された世界最大規模のJavaライブラリ配信元で、Sonatype社が長らく運営してきました。pom.xmlにを書くとMavenは自動でMaven Centralから該当JARをダウンロードし、ローカルの~/.m2/repositoryにキャッシュします。推移的依存も再帰的に解決され、衝突した版数についてはNearest Wins(POMから近いもの優先)のルールで自動的に選ばれます。

セクションを使うと、子モジュールでバージョンを書かなくても共通の版数が適用される設計が組めます。Spring Boot Dependencies BOMやJUnit Jupiter BOMはその代表で、importで読み込むだけで関連ライブラリの版数を一気にそろえられます。Maven Enforcer Pluginを併用すれば、依存ツリー内で別バージョンが混入していないかをビルド時に自動チェックでき、巨大プロジェクトの保守性が保たれます。

GradleやAntとの選び分け

GradleやAntとの選び分け

JavaビルドツールはAnt → Maven → Gradleと進化してきましたが、用途によって選び分けるのが現実的です。Mavenは「規約に従えばすぐ動く」「Central連携が公式」「プラグインと書籍が豊富」という安定感が魅力で、Spring・JUnit・Hibernateなどの主要ライブラリは今もMaven Centralを軸に配布されています。OSS開発でMaven Centralへ公開する手順もMaven公式が用意するため、ライブラリ配布側の標準として選ばれやすいツールです。

一方、Androidプロジェクトや独自タスクが多いビルドではGradleの柔軟性が勝ち、ScalaプロジェクトではsbtやMaven Scala Pluginが使われ、Googleや大手金融機関のモノレポではBazelが採用されることがあります。新規Java/Spring Bootプロジェクトの大半では今もMavenが第一選択肢として安定しており、mvn clean installの一行で全てが完結する分かりやすさは強力な武器です。

まとめ

Mavenは2004年にApache Software Foundationが公開し、pom.xmlとライフサイクルでJavaビルドの標準を作り上げました。規約に従う設計とMaven Centralの統合により、依存解決から成果物配布までを一貫した手順で扱えます。Gradleとの選択肢が増えた今でも、ライブラリ配布と中小規模Javaプロジェクトでは引き続き有力な第一選択肢として位置づけられます。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次