ぺーぺーSEのブログ

備忘録・メモ用サイト。

Mavenのビルドのライフサイクル

Mavenのビルドのライフサイクルには「phase」と「goal」という概念がある。

phase

phase」はビルドのライフサイクルの(文字通り)フェーズを示す。
「phase」はビルドのライフサイクルをシーケンシャルに分割・分類・命名し、それぞれに役割を定めたもの。

■defaultのライフサイクル
phase 役割
validate プロジェクトが正しく、全ての情報が有効かチェックする。
initialize プロパティのセットやディレクトリの作成等の初期化処理を行う。
generate-sources コンパイルに含めるソースコードを生成する。
process-sources ソースコードにフィルタリング等の処理を行う。
generate-resources パッケージに含めるリソースファイル等を生成する。
process-resources リソースファイルのコピーやまとめ等の処理を行う。
compile ソースコードコンパイルする。
process-classes コンパイル後のバイトコードに何等かの処理を行う。
generate-test-sources コンパイルに含めるテスト用のソースコードを生成する。
process-test-sources テスト用のソースコードにフィルタリング等の処理を行う。
generate-test-resources テスト用のリソースファイル等を作成する。
process-test-resources テスト用のリソースファイルのコピーやまとめ等の処理を行う。
test-compile テスト用のソースコードコンパイルする。
process-test-classes コンパイル後のテスト用のバイトコードに何等かの処理を行う。
test 単体テストを実行する。
prepare-package パッケージングの前処理を行う。
package jarファイル等のアーカイブにパッケージングする。
pre-integration-test 結合試験実行前の環境設定等の処理を行う。
integration-test 結合試験を実行する。
post-integration-test 結合試験実行後の環境設定クリア等の処理を行う。
verify 品質基準を満たしているかどうかを確認するために任意のチェックを実行する。
install パッケージをローカルリポジトリへ格納する。
deploy パッケージをリモートリポジトリへ格納したり、ある環境へデプロイしたりする。

上記のphaseは上から下へシーケンシャルに流れる。
mvn [phase名]」コマンドで、そのphaseまでの処理を実行することができる。
各phaseでの処理内容はプラグインの処理内容が割り当てられ、POMでプラグインの定義を行う際の「phase」タグで設定する。
プラグインを何も設定しなくてもmvnコマンドが実行できるのは、「org.apache.maven.plugins」グループのプラグインの一部が予め各フェーズに割り当てが設定されているから。
また、ビルドのライフサイクルには「default」の他に「clean」「site」がある。

■cleanのライフサイクル

プロジェクトをクリーンするための定義。

phase 役割
pre-clean プロジェクトをクリーンする前に必要な処理を行う。
clean 以前のビルドが作成した全てのファイルを削除する。
post-clean プロジェクトのクリーンを仕上げるために必要な処理を行う。


■siteのライフサイクル

プロジェクトのサイトドキュメント(Webサイトやテストレポート)を生成・デプロイする定義。

phase 役割
pre-site サイトドキュメント生成前に必要な処理を実行する。
site プロジェクトのサイトドキュメントを生成する。
post-site サイトドキュメントの生成の仕上げとサイトドキュメントのデプロイの準備のために必要な処理を行う。
site-deploy 指定されたウェブサーバにサイトドキュメントをデプロイする。



goal

goal」とは、一言でいうと「プラグインが持つ機能」のこと。
例えば、Maven Eclipse Plugin(org.apache.maven.plugins:maven-eclipse-plugin)には以下の3つのgoalがある。

先程phaseの節で『各phaseでの処理内容はプラグインの処理内容が割り当てられ』と説明したが、この『プラグインの処理内容』がgoalである。
つまり、
≪ビルドライフサイクルの各 phase にプラグインの goal を設定する≫
ことになる。
そして、Mavenでは、「org.apache.maven.plugins」グループのプラグインの一部のアーティファクトのgoalがデフォルトで設定されている。
例えば、「compile」フェーズでは、「org.apache.maven.plugins:maven-comiler-plugin」の「compile:compile」がゴールに設定されている。
さらに、1つの「phase」には0個以上の「goal」を設定することができる。
デフォルトの「phaze‐goal」の設定には以下のようなものがある。

■defaultのphase‐goal例
phase goal
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar:rar or war:war or site:attach-descriptor
install install:install
deploy deploy:deploy

※POMの「packaging」タグの設定によって、「package」フェーズで実行されるgoalが異なる。
※なお、packagingに対するデフォルトのライフサイクルはcomponents.xmlで定義されている。

■cleanのphase‐goal例
phase goal
clean clean:clean


■siteのphase‐goal例
phase goal
site site:site
site-deploy site:deploy



各goalの処理の内容についてはpluginのサイトを参考のこと。

Mavenのライフサイクル:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

Mavenプラグイン
http://maven.apache.org/plugins/index.html

Mavenプラグインの設定:
http://maven.apache.org/guides/mini/guide-configuring-plugins.html