お久しぶりです。
さすが師走と言うか、忙しくてなかなかblog書く暇がありません。
今日はm2のPluginのつくり方について調べたことのメモです。
調べているうちにさらに様々な疑問点、問題点が噴出してきてしまって
いるのですが、それはとりあえず置いておいてプラグインの書き方の話しに
集中しましょう。
m2のPluginの作り方は意外と簡単で、以下の3ステップでOKです。
これで、作ったPluginがローカルリポジトリにインストールされて、
使えるようになります。
以下、各ステップをもうちょい詳しく解説します。
1. Plugin用のPOMを作る
まずPlugin自体のPOMを作ります。このPOMはリポジトリにインストールされて、
Pluginが依存するjarを自動的にダウンロードする時などに使われます。
今回作ったPOMは以下のような感じです。
2.AbstractPluginクラスをextendしてJavaクラスとしてプラグインを記述する。
いよいよプラグイン本体の作成です。
今回作ったのはPOMに書かれたプロジェクト名を
出力するというごく簡単な物です。
ソースコードは大体以下の通りです。パッケージ宣言とかインポート文は省いてます。
実装しなくてはならないのはexecuteだけのようです。
なんだかServletみたいなインターフェースですね。
JavaDocの中に定義しているパラメータとrequest.getParameterで取得している
パラメータとの対応関係に注意して下さい。
プラグインが必要とするパラメータは設定情報として切り出されて、
コンテナ側が勝手にrequestオブジェクトにセットしてくれるようになっています。
おかげでm2のpluginはPluginのインターフェースにのみ依存し、
m2のCoreには依存しないように記述することが出来ます。
2.plugin:installゴールを実行
ここまで出来たらプロジェクトのベースディレクトリで
m2 plugin:install
を実行すると、JavaDocの中に書かれていた設定情報から
XML形式の設定ファイルを生成し、クラスをコンパイルし、Jarに固め、
ローカルリポジトリにインストールし、POMもローカルリポジトリにインストールし、
使える状態に持っていってくれます。
このプラグインを実行するには
m2 foo:print
でOKです。
POMのname要素に書かれているプロジェクト名が出力されるはずです。
さすが師走と言うか、忙しくてなかなかblog書く暇がありません。
今日はm2のPluginのつくり方について調べたことのメモです。
調べているうちにさらに様々な疑問点、問題点が噴出してきてしまって
いるのですが、それはとりあえず置いておいてプラグインの書き方の話しに
集中しましょう。
m2のPluginの作り方は意外と簡単で、以下の3ステップでOKです。
- Plugin用のPOMを作る。
- AbstractPluginクラスをextendしてJavaクラスとしてプラグインを記述する。
- plugin:installゴールを実行
これで、作ったPluginがローカルリポジトリにインストールされて、
使えるようになります。
以下、各ステップをもうちょい詳しく解説します。
1. Plugin用のPOMを作る
まずPlugin自体のPOMを作ります。このPOMはリポジトリにインストールされて、
Pluginが依存するjarを自動的にダウンロードする時などに使われます。
今回作ったPOMは以下のような感じです。
<?xml version="1.0" encoding="Shift_JIS"?> <project> <!-- おまじない。Pluginの共通の親POM。 Mavenリポジトリ内のPOMを継承している! --> <parent> <groupId>maven</groupId> <artifactId>maven-plugin-parent</artifactId> <version>2.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <!--groupIdはかならずmaven--> <groupId>maven</groupId> <!--artifactIdはmaven-[Plugin名]-plugin--> <artifactId>maven-foo-plugin</artifactId> <name>My First Plugin</name> <type>plugin</type> <!--いまのところバージョンはこれ以外指定できない--> <version>1.0-SNAPSHOT</version> <inceptionYear>2001</inceptionYear> <package>org.apache.maven</package> <logo>/images/maven.gif</logo> </project>
2.AbstractPluginクラスをextendしてJavaクラスとしてプラグインを記述する。
いよいよプラグイン本体の作成です。
今回作ったのはPOMに書かれたプロジェクト名を
出力するというごく簡単な物です。
ソースコードは大体以下の通りです。パッケージ宣言とかインポート文は省いてます。
/** * @goal print * * @description deploys a pom to remote repository * * @parameter * name="projectName" * type="String" * required="true" * validator="" * expression="#project.name" * description="" * */ public class SampleMojo extends AbstractPlugin { public void execute(PluginExecutionRequest request, PluginExecutionResponse response) { String pn = (String) request.getParameter("projectName"); System.out.println("Project Name:" + pn); } }
実装しなくてはならないのはexecuteだけのようです。
なんだかServletみたいなインターフェースですね。
JavaDocの中に定義しているパラメータとrequest.getParameterで取得している
パラメータとの対応関係に注意して下さい。
プラグインが必要とするパラメータは設定情報として切り出されて、
コンテナ側が勝手にrequestオブジェクトにセットしてくれるようになっています。
おかげでm2のpluginはPluginのインターフェースにのみ依存し、
m2のCoreには依存しないように記述することが出来ます。
2.plugin:installゴールを実行
ここまで出来たらプロジェクトのベースディレクトリで
m2 plugin:install
を実行すると、JavaDocの中に書かれていた設定情報から
XML形式の設定ファイルを生成し、クラスをコンパイルし、Jarに固め、
ローカルリポジトリにインストールし、POMもローカルリポジトリにインストールし、
使える状態に持っていってくれます。
このプラグインを実行するには
m2 foo:print
でOKです。
POMのname要素に書かれているプロジェクト名が出力されるはずです。