Skip to content
Latchkey

Mavenとは?Javaのビルド兼依存関係ツールを解説

MavenはJava向けのbuild兼依存関係管理ツールで、宣言的なプロジェクトファイル (POM) と標準的なbuildライフサイクルを使います。

MavenはJavaのbuildに設定より規約の考え方をもたらしました。プロジェクトをpom.xmlに記述すると、Mavenは固定されたライフサイクルを通じてそれをコンパイル、test、パッケージ化、deployする方法を把握し、中央リポジトリから依存関係を自動的に取得します。

Mavenとは

Mavenは主にJavaやその他のJVM言語向けのbuild自動化兼依存関係管理ツールです。中心となる成果物はProject Object Model (pom.xml) で、プロジェクトの座標、依存関係、plugin、buildの設定を宣言します。依存関係はMaven Centralのようなリポジトリから取得されます。

POMとライフサイクル

Mavenは順序付けられたフェーズを持つ標準的なbuildライフサイクルを定義します。validate、compile、test、package、verify、install、deployです。あるフェーズを実行すると、それより前のすべてのフェーズが実行されます。pluginはgoalをフェーズに結び付けるため、「mvn package」はコンパイル、test、そしてJARやWARのbuildを行います。POMと規約により、ほとんどのプロジェクトはカスタム設定をほとんど必要としません。

使用例

ほとんどのCIのbuildは単一のフェーズ呼び出しです。

Common Maven commands
# compile, run tests, and build the artifact
mvn -B clean package

# skip tests when you only need the build
mvn -B package -DskipTests

CI/CDでの役割

pipelineでは、「mvn clean package」または「mvn verify」がプロジェクトをコンパイル、test、パッケージ化し、何らかのエラーがあればjobをfailさせます。「-B」(batch) フラグは対話的な出力を抑え、CIのログをきれいに保ちます。ローカルのMavenリポジトリ (~/.m2) を実行間でcacheすると依存関係の再ダウンロードを避けられ、これはJVMのCIにおける最大級の時間短縮の1つです。より重いMavenのbuildやtest段階は、温まった依存関係cacheを持つマネージドrunnerでより速く実行されます。

代替ツール

Gradleが主な代替で、インクリメンタルコンパイルと、しばしばより高速なbuild cacheを備えた柔軟でスクリプト可能なbuildを提供します。Bazelは非常に大規模で多言語なmonorepoを狙います。Mavenは、その安定性、予測可能性、そして膨大なpluginエコシステムにより人気を保っています。

重要なポイント

  • Mavenは宣言的なpom.xmlからJVMプロジェクトをbuildします。
  • 固定されたライフサイクル (compile、test、package、deploy) がbuildを駆動します。
  • CIでは~/.m2リポジトリをcacheし、依存関係の再ダウンロードを避けます。

関連ガイド