目次へ

2008.02.25 株式会社四次元データ 森

8. Maven2 プラグインの作成

8.2. プラグインの作成準備

今回サンプルとして作成するのは、「指定したディレクトリ配下の、指定した拡張子のファイルの行数をカウントする」プラグインです。

8.2.1 プラグインの命名

Maven からプラグインを呼び出す際には、プラグインの名称が重要となります。作成したプラグインは

$ mvn groupID:artifactID:version:goal

という形式で呼び出せますが、artifactId が maven-$name-plugin となっていると

$ mvn groupID:$name:version:goal

といった形に省略できます。さらにプラグインの pom.xml の build 要素以下に groupId などの指定を行うか

:
<build>
	<plugins>
		<plugin>
			<groupId>com.example.maven.plugins</groupId>
			<artifactId>maven-$name-plugin</artifactId>
			<version>1.0-SNAPSHOT</version>
		</plugin>
		:
	</plugins>
</build>
:
もしくは ホームディレクトリ下の Maven のローカルリポジトリにある、/.m2/settings.xml の pluginGroups 要素で
<pluginGroups>
	<pluginGroup>com.example.maven.plugins</pluginGroup>
</pluginGroups>

上記のように指定すれば

$ mvn $name:$goal

という呼び出しまでできるようになります。ここまですればほぼ通常の mvn コマンドと変わらない形で実行が可能です。Maven - Guide to Developing Java Plugins の "Executing Your First Mojo" の項で詳細が確認できます。

上記を踏まえて、maven-countlines-plugin を作成し、

$ mvn countlines:countlines

のように実行できるようにしたいと思います。

8.2.2 Maven プラグインプロジェクトの作成

Maven プラグインを作成する際には以下の二点が必要です。

  • packaging 要素を「maven-plugin」とする
  • maven-plugin-api に対して依存関係を付与する

前者を指定することで実際のプラグインの配備時に Maven plugin として必要なパッケージングを行い、プラグインの設定ファイルである plugin.xml などが自動生成するようになります。後者には前節で述べた Mojo インターフェースなどが含まれます。 Maven Plugin API のバージョンは最新版を用いることにしましょう。2008年2月現在、2.0.8 が最新版になります。

Maven 2.0.8 からは引数を覚える必要がなくなり、

$ mvn archetype:create

とし、順番にarchetype, groupId, artifactId, version, package を聞かれますので、それに沿って指定していけばよくなりました。なお、Maven 2.0.7 まで用いられた、引数での指定は使えなくなっているようです。

  • Choose a numeber : mave-archetype-mojo (A Maven plugin development project) と記述してある数字を指定します。
  • Define value for groupId : com.example.maven.plugins
  • Define value for artifactId : maven-countlines-plugin
  • Define value for version : 1.0-SNAPSHOT
  • Define value for package : com.example.maven.plugins

上記のような指定を行い最後に Y : と聞かれますのでエンターキーをタイプし実行すればプラグインプロジェクトがビルドされます。訂正する場合は Y : n とするともう一度 groupId から指定しなおします。

この操作により生成される pom.xml には以下の記述が含まれていることを確認してください。

:
<groupId>com.example.maven.plugins</groupId>
<artifactId>maven-countlines-plugin</artifactId>
<packaging>maven-plugin</packaging>

<dependencies>
	<dependency>
		<groupId>org.apache.maven</groupId>
		<artifactId>maven-plugin-api</artifactId>
		<version>2.0.8</version>
	</dependency>
:

8.2.3 Eclipese への読み込み

先ほど作成した Maven プラグインプロジェクトを Eclipse へ読み込ませます。まず Java Project の新規作成を選び、プロジェクト名を maven-countlines-plugin とします。MyMojo.java という java クラスが生成しているのが確認できますが、これは今回用いないのでいったん削除します。

この際に m2eclipse が有効になっていることを確認してください。プロジェクト上で右クリックすると Maven2 というコンテキストメニューがありますので enable になっていることを確認します。

8.2.4 Mojo インターフェース実装クラス

プラグインそのものとなる Mojo インターフェースの実装クラスの作成に入ります。最初から AbstractMojo という抽象クラスが用意されているのでそれを拡張していく手法をとります。ここでは CountlinesMojo としました。

生成した Mojo クラスに対してゴール名を設定する必要がありますが、ここで Maven プラグインの作成方法の大きな特徴があります。Mavenプラグインでは、ゴール名やそのゴールが依存するフェーズなどを、直接クラスファイルに javadoc として記述します。特に今後設定用の XML ファイルなどを作成する必要はありません。

クラスに対して設定出来る javadoc については以下があります。

@goal ゴール名
@phase このプラグインが紐付けられるフェーズ名
@execute このゴールの実行時に並行して実行されるフェーズ名、ゴール名、ライフサイクル名
@requiresDependencyResolution このプラグインの実行に必要な依存関係のスコープ、現時点では compile/runtime/test が指定可能

今回ゴール名として、countlines を指定します。特に依存関係を扱うプラグインを利用する際にはこの @requiresDependencyResolution に注意してください。またこれらの javadoc のエントリの内部には日本語を使わないで下さい。というのも、 Maven - Maven 2.0 - Mojo API Specification の "The Descriptor and Annotations" にもあるように、javadoc のコメントはそのプラグインの Description に利用されます。それは先述の plugin.xml 内にそのまま含まれてしまい、文字列が文字化けしたままとなってしまいます。UTF-8 で作成してもこれについては対処がなされていませんでした。

これらを踏まえると CountlinesMojo クラスの書き出しは以下のようになります。

/**
 * Count lines of selected files 
 * @goal countlines
 */
public class CountlinesMojo extends AbstractMojo {
:

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp