Mavenの目標とフェーズ
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:testCompileはtest-compileフェーズにバインドされています
- surefire:testはtestフェーズにバインドされています
- install:installはinstallフェーズにバインドされています
- 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フェーズと目標の関係について説明しました。