N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

Maven2:プラグインを作ってみよう!

2004-12-12 21:31:23 | オープンソース
お久しぶりです。
さすが師走と言うか、忙しくてなかなかblog書く暇がありません。

今日はm2のPluginのつくり方について調べたことのメモです。
調べているうちにさらに様々な疑問点、問題点が噴出してきてしまって
いるのですが、それはとりあえず置いておいてプラグインの書き方の話しに
集中しましょう。

m2のPluginの作り方は意外と簡単で、以下の3ステップでOKです。

  1. Plugin用のPOMを作る。

  2. AbstractPluginクラスをextendしてJavaクラスとしてプラグインを記述する。

  3. 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要素に書かれているプロジェクト名が出力されるはずです。

最新の画像もっと見る