前回は、あるフェーズを実行したときに作成した mojo の処理を割り込ませる方法を見ました。 今回は自作の mojo を実行する際に、(事前に)他のフェーズやゴールの処理を呼び出す方法を見ていきます。
これには「@execute アノテーション」を使います。
サンプル
とりあえずサンプル・コードを。 前回に出てきた HelloMojo の実行前に install フェーズ*1を実行するように設定してみましょう。
変更した HelloMojo は下記のようになります:
package org.sample; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; /** * My first plugin ! * * @goal sayhi * @execute phase="install" */ public class HelloMojo extends AbstractMojo{ public void execute()throws MojoExecutionException{ getLog().info("***** Hello, world ! *****"); } }
変更は JavaDoc アノテーション「@execute phase="install"」を付加しただけです。
前回のようなプラグインを使用するプロジェクト側での設定は必要ありません。 また、mojo の実行方法は、普通に自作の mojo を実行する方法(前々回参照)と同じです。
@execute の設定
@execute アノテーションの設定の仕方には以下の3通りがあります:
- @execute phase="phaseName" lifecycle="lifecycleId"
- @execute phase="phaseName"
- @execute goal="goalName"
★@execute phase="phaseName" lifecycle="lifecycleId"★
これは、lifecycleId で指定されたライフサイクルを phaseName で指定されたフェーズまでを実行し、その後に自作の mojo を実行します。
設定例はこんな感じ:
@execute phase="pre-site" lifecycle="site"
★@execute phase="phaseName"★
これは lifecycle="default" として上記のアノテーションを付加したのと同じです。 デフォルトのライフサイクルとは、通常の「compile」や「install」などが含まれているライフサイクルです*2。
★@execute goal="goalName"★
これは、goalName で指定したゴールを実行し、その後に自作の mojo を実行します。 指定したゴールは単独で実行され、(フェーズを指定したときのように)他のゴールやフェーズを事前に呼び出しません。
設定例はこんな感じ:
@execute goal="jar:jar"
何か、いまいち goal の設定がうまくいかない・・・