Mavenのゴールとフェーズ

Mavenの目標とフェーズ

1. 概要

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

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

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

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

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

  • デフォルト:プロジェクトの展開を担当するメインライフサイクル

  • clean:プロジェクトをクリーンにし、以前のビルドで生成されたすべてのファイルを削除します

  • サイト:プロジェクトのサイトドキュメントを作成します

Each life cycle consists of a sequence of phases.defaultのビルドライフサイクルは、メインのビルドライフサイクルであるため、23のフェーズで構成されています。

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

3. Mavenフェーズ

A Maven phase represents a stage in the Maven buildのライフサイクル。 各フェーズは特定のタスクを担当します。

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

  • validate:は、ビルドに必要なすべての情報が利用可能かどうかを確認します

  • compile:はソースコードをコンパイルします

  • test-compile:はテストソースコードをコンパイルします

  • test:はユニットテストを実行します

  • package:パッケージは、ソースコードを配布可能な形式(jar、war、…)にコンパイルしました。

  • integration-test:は、統合テストを実行するために必要な場合、パッケージを処理およびデプロイします

  • install:はパッケージをローカルリポジトリにインストールします

  • deploy:はパッケージをリモートリポジトリにコピーします

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

フェーズは特定の順序で実行されます。 つまり、次のコマンドを使用して特定のフェーズを実行すると、

mvn 

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

たとえば、defaultビルドライフサイクルの最後のフェーズであるdeployフェーズを実行すると、deployフェーズの前のすべてのフェーズ(%全体)も実行されます。 (t3)のライフサイクル:

mvn deploy

4. Mavenの目標

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

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

以下に、いくつかのフェーズとそれらにバインドされたデフォルトの目標を示します。

  • compiler:compilecompilerプラグインからのcompileゴールは、compileフェーズにバインドされます

  • compiler:testCompiletest-compileフェーズにバインドされています

  • surefire:testtestフェーズにバインドされています

  • install:installinstallフェーズにバインドされています

  • jar:jarおよびwar:warpackageフェーズにバインドされます

次のコマンドを使用して、特定のフェーズにバインドされたすべての目標とそのプラグインをリストできます。

mvn help:describe -Dcmd=PHASENAME

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

mvn help:describe -Dcmd=compile

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

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

これは、前述のように、compilerプラグインからのcompileゴールがcompileフェーズにバインドされていることを意味します。

5. Mavenプラグイン

A Maven plugin is a group of goals.ただし、これらの目標は必ずしもすべて同じフェーズにバインドされているわけではありません。

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


    
        
            maven-failsafe-plugin
            ${maven.failsafe.version}
            
                
                    
                        integration-test
                        verify
                    
                
            
        
    

ご覧のとおり、Failsafeプラグインには2つの主要な目標が設定されています。

  • integration-test:統合テストを実行します

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

次のコマンドを使用してlist all goals in a specific pluginを実行できます。

mvn :help

たとえば、Failsafe pluginのすべての目標を一覧表示するには:

mvn failsafe:help

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

This plugin has 3 goals:

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

failsafe:integration-test
  Run integration tests using Surefire.

failsafe:verify
  Verify integration tests ran using Surefire.

To run a specific goal, without executing its entire phase (and the preceding phases)次のコマンドを使用できます。

mvn :

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

mvn failsafe:integration-test

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

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

mvn deploy

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

mvn install

ただし、通常は次のコマンドを使用します。

mvn clean install

新しいビルドの前に、最初に(cleanライフサイクルを実行して)プロジェクトをクリーンアップします。

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

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のフェーズと目標の関係について説明しました。