はじめに
ソフトウェアの開発手法は日々進化しており、ビルドツールやバージョン管理ツールなど、便利なものが出てきました。mavenはこれらの便利なツールを統合し、プロジェクト単位で管理できるようにするツールです。前回の記事『Mavenを利用してオールインワンのプロジェクト環境を構築する』では、単体テスト、ドキュメント作成、CVSの操作をmaven上から一貫して行う方法を見ました。本稿では、前回扱ったドキュメント作成をカスタマイズし、独自のレポートを追加できるようにします。例えば、プロジェクトの要件定義書を追加したい、データベーステーブルの定義書を載せたいといった場合にはレポートの追加が必要になります。
本稿では、前回の記事などにより、ドキュメントの作成方法やmavenの基本的な知識、インストール方法、操作方法を知っていることを前提として、話を進めていきます。
mavenに独自のドキュメントを追加する場合、特定のゴールを持つプラグインを作成します。よって、今回は大きく次の2点を扱います。
- プラグインの基本的な作成方法
- レポートを追加するプラグインの作成
対象読者
Javaプログラミングを行ったことがあり、mavenの操作方法についてある程度の知識を持っている方を対象としています。mavenの基本的な操作方法はmavenのホームページ、または拙稿『Mavenを利用してオールインワンのプロジェクト環境を構築する』などを参照してください。
必要な環境
このサンプルはJ2SE Development Kit 1.4.2、Maven-1.0.2にて動作を確認しています。
サンプルの概要と注意
サンプルには次の二つのディレクトリが含まれています
- 「maven-sample-plugin」ディレクトリ(プラグインを作成するプロジェクト)
- 「sample」ディレクトリ(プラグインを試すためのサンプルプロジェクト)
サンプルを試す場合、この2つのディレクトリを任意の作業用ディレクトリ(例えば、「C:\dev」)に配置し、以下のように操作します。
- 「maven-sample-plugin」ディレクトリにカレントディレクトリを移動
- 「maven-sample-plugin」プラグインをインストール(詳細は後述)
- 「sample」ディレクトリにカレントディレクトリを移動
- siteゴールの実行
プラグインとmavenの関係
mavenのプラグインは、mavenコマンドにプラグインの持つゴール名を指定することで実行されるプログラムです。mavenでは、例えば次のように操作すると、プロジェクトのコンパイルを行うことができます。
> maven java:compile
この機能はmavenに標準で備わっていますが、maven自身がプロジェクトをコンパイルする機能を持っているのではありません。プロジェクトをコンパイルするプラグインが、mavenに標準で装備されているのです。プラグインは、mavenをインストールしたディレクトリ(以下、MAVEN_HOME)の直下にある「plugins」ディレクトリの中に、jarファイルとなってインストールされていますが、その中の「maven-java-plugin-1.5.jar」というプラグインがjava:compileゴールを持つプラグインとなっています。
mavenは、maven単体でさまざまな機能を提供しているのではなく、実は、多くのプラグインによって機能を提供しているのです。mavenは、ソフトウェア開発のプロジェクトに必要なさまざまな機能(=プラグイン)の言わばポータルとして機能しています。
プラグインの基本的な作成方法
独自のレポートを作成できるようにするには、レポートを作成するためのプラグインを作成します。まずは簡単なプラグインの作成方法について解説します。
プロジェクトの作成
プラグインの作成方法は、通常のmavenのプロジェクトを作成する方法とほとんど一緒です。まずはプラグインを作るためのプロジェクトを作成しましょう。以下のように、mavenコマンドのgenappゴールを使い、プロジェクトを作成してください。サンプルでは、「c:\dev」という作業ディレクトリ上で、maven-sample-pluginというプロジェクトを作成します。
>cd c:\dev\maven-sample-plugin > maven genapp ... Enter a project template to use: [default] [Enter] Please specify an id for your application: [app] maven-sample-plugin[Enter] Please specify a name for your application: [Example Application] Maven Sample Plugin[Enter] Please specify the package for your application: [example.app] project.wings.maven.sample[Enter] build:start: ...
以上の操作で、「c:\dev\maven-sample-plugin」ディレクトリの中に「project.xml」が生成されます。このファイルを以下のように編集します。
<project> <pomVersion>3</pomVersion> <id>maven-sample-plugin</id> <name>Maven Sample Plugin</name> <currentVersion>1.0</currentVersion> <build> <resources> <resource> <directory>${basedir}/plugin-resources</directory> <targetPath>plugin-resources</targetPath> </resource> <resource> <directory>${basedir}</directory> <includes> <include>plugin.jelly</include> <include>plugin.properties</include> <include>project.properties</include> <include>project.xml</include> </includes> </resource> </resources> </build> </project>
以上でプラグインを作る準備は終わりました。では、具体的な機能を持つプラグインを作ってみましょう。
プラグインの実装
mavenのプラグインを作成するには、次の表にあるファイルを作成します。
ファイル名 | 説明 | 必須かどうか |
project.xml | プラグイン自身のプロジェクト定義ファイル。既に作成済み。 | 必須 |
plugin.jelly | プラグインを実行するゴールの定義や、プラグインの機能を実装するファイル。 | 必須 |
plugin.properties | プラグインに用いられる任意のプロパティを定義したファイル。 | 任意 |
これらのファイルは、いずれもプラグインのプロジェクトのルートディレクトリ(サンプルでは、「c:\dev\maven-sample-plugin」ディレクトリ)直下に配置します。
その他に、スタイルシートなどのプラグインで必要なリソースがあれば、「プラグインルート\plugin-resources」ディレクトリ以下に配置します。また、javaなどのプログラムファイルが必要であれば、プラグインルート以下に配置します。
では、「plugin.jelly」ファイルを作成します。「plugin.jelly」ファイルはJellyというXMLの記述方式に沿ったスクリプト言語で記述します。Jellyについての情報はJellyのホームページなどを参照してください。ここではサンプルの簡単な解説のみで、Jellyの詳しい文法やプログラミング方法については扱いません。
以下のようにファイルを作成してください。
<project xmlns:ant="jelly:ant" > <goal name="maven-sample-plugin:description" description="Echo This Goals Description"> <ant:echo>Sample Plugin for Maven</ant:echo> </goal> </project>
このサンプルでは、「maven-sample-plugin:description」という名前のゴールを定義しています。ここでは、標準出力先(Windowsでは標準でコマンドプロンプトの画面)に「Sample Plugin for Maven」と表示させるゴールを定義しています。
「plugin.jelly」ファイルには、project
要素の中に作成したいゴールをgoal
要素として登録していきます。goal
要素は複数登録することができます。ここで出てきた要素を以下にまとめます。
要素名 | 説明 |
<project> | 「plugin.jelly」のルート要素。「plugin.jelly」内の名前空間の定義などを行う。ここでは、jelly:antに登録されたURIに対してantという名前を割り当てている。jelly:antは、jellyタグライブラリのantタスクを実行するためのライブラリ。 |
<goal> | プラグインのゴールを定義する。ゴールの名前はname 属性に定義する。また、description 属性にはゴールの説明を記述する。 |
<ant:echo> | 文字列を標準出力先に出力するためのantタスクを表すタグ。 |
jellyタグライブラリは、mavenに標準でインストールされているため、mavenコマンドから実行する際には、特に何の設定もせずに使うことができます。
では、mavenコマンドを使って、プラグインの作成、プラグインのインストール、プラグインの実行を行っていきます。
プラグインのインストールと実行
まずは作成したプラグインを、配置できる形(jarファイル)にします。カレントディレクトリをプラグインルートに移動し、次のようにコマンドを入力してください。
> maven plugin ... BUILD SUCCESSFUL ...
ビルドが成功すると、「プラグインルート\target」ディレクトリ直下にプラグインのjarファイルが生成されます。
次にプラグインのインストールを行います。次のようにコマンドを入力してください。
> maven plugin:install ... BUILD SUCCESSFUL ...
インストール作業は、先に生成されたファイルを「MAVEN_HOME\plugins」ディレクトリ直下に配置するだけですので、手動でも行えます。なお、plugin:installゴールを実行した場合、プラグインの作成も行われるので、前もってpluginゴールを実行してプラグインを作成しておく必要はありません。
では、最後に今インストールされたプラグインを実行してみましょう。カレントディレクトリをプロジェクトルートに移動し、以下のようにmavenコマンドを実行してください。
> maven maven-sample-plugin:description ... maven-sample-plugin:description: [echo] Sample Plugin for Maven BUILD SUCCESSFUL ...
プラグインの作成方法の説明は以上です。非常に簡単にmavenのプラグインを作成できることがお分かりいただけたのではないかと思います。