ビルド・ライフサイクル
さて、Mavenはどのようにしてpackageの実行にcompileやtestが必要だと判断したのでしょうか。 これを理解するには、ビルド・ライフサイクルについて知る必要があります。
ビルド・ライフサイクルとは「コンパイル→テスト→JAR作成」などのビルドにおける作業の順番を定義したものです。 標準でdefaultサイクルとcleanサイクル、siteサイクルが用意されています。 先ほどpackageフェーズ実行時に使ったのが defaultサイクル 、cleanフェーズ実行時に使ったのが cleanサイクル です。
それぞれのビルド・ライフサイクルは1つ以上のフェーズを含んでいます。 これらのフェーズは順番に並んでいて、あるフェーズが実行されるには それ以前のフェーズが実行済み でなければなりません。 言い換えると、すべてのフェーズはそのひとつ前のフェーズに依存しているということです。
defaultライフサイクル
defaultライフサイクルには次のように並んだフェーズが含まれています。
validate (プロジェクトの状態確認)
initialize (ビルドの初期化処理)
generate-sources (ソースコードの自動生成)
process-sources (ソースコードの自動処理)
generate-resources (リソースの自動生成)
process-resources (リソースの自動処理)
compile (プロジェクトのコンパイル)
process-classes (classファイルの自動処理)
generate-test-sources (テストコードの自動生成)
process-test-sources (テストコードの自動処理)
generate-test-resources (テスト用リソースの自動生成)
process-test-resources (テスト用リソースの自動処理)
test-compile (テストコードのコンパイル)
process-test-classes (テスト用classファイルの自動処理)
test (ユニットテストの実行)
prepare-package (アーティファクト作成の準備)
package (アーティファクトの作成)
pre-integration-test (インテグレーションテストの前処理)
integration-test (インテグレーションテストの実行)
post-integration-test (インテグレーションテストの後処理)
verify (アーティファクトの検証)
install (アーティファクトをローカルリポジトリに配置)
deploy (アーティファクトをリモートリポジトリに配置)
先ほどMavenがコンパイルや自動テストを実行したのは、packageフェーズを実行するために必要なvalidateからprepare-packageまでの16のフェーズすべてを実行したためです。 こうしたフェーズの依存関係によって、Mavenユーザはやりたいことだけを伝えるだけで済むのです。
cleanライフサイクル
前述のdefaultライフサイクルにはcleanフェーズが見当たりません。 cleanフェーズはcleanライフサイクルと呼ばれる他のライフサイクルに属しています。 このライフサイクルには3つのフェーズがあります。
pre-clean (一時ファイル削除の前処理)
clean (一時ファイルの削除)
post-clean (一時ファイル削除の後処理)
たとえば mvn clean install
と実行すると、まずはcleanライフサイクルが実行され、その次にdefaultライフサイクルが実行されます。 mvn clean clean
ではcleanライフサイクルが2回実行されます。
Last updated