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がある。
- eclipse:configure-workspace
- eclipse:eclipse
-
- Eclipseの設定ファイルを作成する
-
- eclipse:clean
-
- Eclipseが使用する設定ファイルを削除する
-
先程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