1. 概要

このチュートリアルでは、さまざまなMavenビルドライフサイクルとそのフェーズについて説明します。

また、目標とフェーズの間のコア関係についても説明します。

2. Mavenビルドライフサイクル 

Mavenビルドは、特定のライフサイクルに従って、ターゲットプロジェクトをデプロイおよび配布します。

3つの組み込みライフサイクルがあります。

  • デフォルト:プロジェクトの展開を担当するメインライフサイクル
  • clean:プロジェクトをクリーンアップし、前のビルドで生成されたすべてのファイルを削除します
  • サイト:プロジェクトのサイトドキュメントを作成します

各ライフサイクルは一連のフェーズで構成されます。デフォルトビルドライフサイクルは、メインのビルドライフサイクルであるため、23のフェーズで構成されます。

一方、 clean のライフサイクルは3つのフェーズで構成され、siteのライフサイクルは4つのフェーズで構成されます。

3. Mavenフェーズ

Mavenフェーズは、Mavenビルドライフサイクルのステージを表します。 各フェーズは特定のタスクを担当します。

デフォルトビルドライフサイクルの最も重要なフェーズのいくつかを次に示します。

  • 検証:ビルドに必要なすべての情報が利用可能かどうかを確認します
  • コンパイル:ソースコードをコンパイルします
  • test-compile:テストソースコードをコンパイルします
  • テスト:単体テストを実行します
  • package:パッケージはソースコードを配布可能な形式(jar、war、…)にコンパイルしました
  • 統合テスト:統合テストを実行するために必要な場合は、パッケージを処理してデプロイします
  • インストール:パッケージをローカルリポジトリにインストールします
  • deploy:パッケージをリモートリポジトリにコピーします

各ライフサイクルのフェーズの完全なリストについては、 MavenReferenceを確認してください。

フェーズは特定の順序で実行されます。 これは、次のコマンドを使用して特定のフェーズを実行する場合を意味します。

mvn <PHASE>

指定されたフェーズだけでなく、先行するすべてのフェーズも実行されます。

たとえば、defaultビルドライフサイクルの最後のフェーズであるdeployフェーズを実行すると、deployフェーズの前にすべてのフェーズが実行されます。同様に、これはデフォルトのライフサイクル全体です。

mvn deploy

4. Mavenの目標 

各フェーズは一連の目標であり、各目標は特定のタスクを担当します。

フェーズを実行すると、このフェーズにバインドされているすべての目標が順番に実行されます。

いくつかのフェーズとそれらにバインドされたデフォルトの目標は次のとおりです。

  • コンパイラ:コンパイルコンパイラプラグインのコンパイルゴールはコンパイルフェーズにバインドされます
  • compiler:testCompiletest-compileフェーズにバインドされています
  • surefire:testtestフェーズにバインドされています
  • install:installinstallフェーズにバインドされています
  • jar:jarおよびwar:warパッケージフェーズにバインドされています

次のコマンドを使用して、特定のフェーズにバインドされているすべてのゴールとそのプラグインを一覧表示できます。

mvn help:describe -Dcmd=PHASENAME

たとえば、コンパイルフェーズにバインドされているすべての目標を一覧表示するには、次のコマンドを実行できます。

mvn help:describe -Dcmd=compile

次に、サンプル出力を取得します。

compile' is a phase corresponding to this plugin:
org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

上記のように、これは、コンパイラプラグインからのコンパイルゴールがコンパイルフェーズにバインドされることを意味します。

5. Mavenプラグイン 

Mavenプラグインは目標のグループです; ただし、これらの目標は必ずしもすべて同じフェーズにバインドされているわけではありません。

たとえば、統合テストの実行を担当するMavenフェイルセーフプラグインの簡単な構成は次のとおりです。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${maven.failsafe.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

ご覧のとおり、Failsafeプラグインには、ここで構成された2つの主要な目標があります。

  • 統合テスト:統合テストを実行します
  • verify :すべての統合テストに合格したことを確認します

次のコマンドを使用して、特定のプラグインのすべての目標を一覧表示できます。

mvn <PLUGIN>:help

たとえば、Failsafeプラグインのすべての目標を一覧表示するには、次のコマンドを実行できます。

mvn failsafe:help

そして、出力は次のようになります。

This plugin has 3 goals:

failsafe:help
  Display help information on maven-failsafe-plugin.
  Call mvn failsafe:help -Ddetail=true -Dgoal=<goal-name> to display parameter
  details.

failsafe:integration-test
  Run integration tests using Surefire.

failsafe:verify
  Verify integration tests ran using Surefire.

フェーズ全体(および前のフェーズ)を実行せずに特定の目標を実行するには、次のコマンドを使用できます。

mvn <PLUGIN>:<GOAL>

たとえば、Failsafeプラグインから Integration-test ゴールを実行するには、次のコマンドを実行する必要があります。

mvn failsafe:integration-test

6. Mavenプロジェクトの構築

Mavenプロジェクトをビルドするには、次のフェーズの1つを実行して、ライフサイクルの1つを実行する必要があります。

mvn deploy

これにより、デフォルトのライフサイクル全体が実行されます。 または、installフェーズで停止することもできます。

mvn install

ただし、通常は、最初にプロジェクトを実行してプロジェクトをクリーンアップします。 掃除 新しいビルド前のライフサイクル:

mvn clean install

プラグインの特定の目標のみを実行することもできます。

mvn compiler:compile

フェーズまたは目標を指定せずにMavenプロジェクトをビルドしようとすると、エラーが発生することに注意してください。

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal

7. 結論

この記事では、Mavenビルドのライフサイクル、およびMavenフェーズと目標の関係について説明しました。