Mavenメモ

作成 2003/10/21
更新 2004/7/20

Mavenって何?

Maven(めいべん)は、Apache Mavenプロジェクトで開発されている、Javaベースのプロジェクト管理ツールです。ビルドツールAntでは、ターゲット、タスク単位に処理を記述しますが、Mavenでは、(ユーザーから見て)もっと大きくプロジェクト、ゴール単位に処理を行います。以下Mavenで使われる用語です。

POM

MavenではPOM(Project Object Model)に基づき、プロジェクト単位でプロジェクトを管理します(変な言い回しですが。。。)。プロジェクトごとのMavenの設定ファイル(通常project.xml)を用意することにより、簡単にビルドを実行できます。

ゴールとプラグイン

Mavenではプラグインを使って、ビルドを実行します。Mavenのコア自体は小さなプログラムですが、プラグインを拡張する仕組みが提供されています。多くのプラグインが用意されており、プラグインによって、JARやWARを作成したり、テスト、静的ガベレージ、Webサイトの作成などが行われます。

またプラグインの中の個々の処理を「ゴール」と呼びます。Mavenでビルドを実行する場合は、以下のようなコマンドを入力します。

maven <プラグイン名>:<ゴール名>

インストール

http://maven.apache.org/ からバイナリをダウンロードします。ここでは次の環境で実験しました。

ダウンロードした、アーカイブを展開し適応なディレクトリに配置します。MAVEN_HOMEとPATHの環境変数を設定します。

環境変数の設定(DOS)

MAVEN_HOME=C:\app\maven-1.0
PATH=%PATH%;%MAVEN_HOME%/bin

よく使う場合はシステムの設定で行ってもよいでしょう。コマンドプロンプトでmaven -hと入力するとコマンドラインのヘルプが表示されます。

Javaアプリケーションのビルド

まず、プロジェクトのディレクトリを作成します。ここではsampleというディレクトリを作成しました。次にコマンドプロンプトで、sampleディレクトリに移動し、次のコマンドを実行します。

maven genapp

genappプラグインで、テンプレートプロジェクトが作成されます。

C:\app\maven-proj\sample>maven genapp
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc1-SNAPSHOT

Enter a project template to use: [default] 
←リターン
Please specify an id for your application:  [app] 
←リターン
Please specify a name for your application:  [Example Application] 
←リターン
Please specify the package for your application:  [default.example.app]
com.muimi ←適当なパッケージを入れてリターン
     [copy] Copying 1 file to C:\app\maven-proj\sample\src\java\com\muimi
     [copy] Copying 3 files to C:\app\maven-proj\sample\src\test\com\muimi
     [copy] Copying 1 file to C:\app\maven-proj\sample
     [copy] Copying 2 files to C:\app\maven-proj\sample
BUILD SUCCESSFUL
Total time: 14 seconds
Finished at: Tue Oct 21 16:57:34 JST 2003

ここでは、パッケージだけ入力しておきます(default...パッケージだとコンパイルが通らないので)。

次のようなディレクトリ構造でプロジェクトが作成されます。

+--project.xml         POMファイル
+--project.properties  設定ファイル
+--src/
|   +--conf/
|   +--java/           ソースパス
|   +--test/           テストソースパス

次のコマンドで、(単体テストの後)JARファイルを作成します。

maven jar:jar

なお、このjar:jarというのは、「jarプラグインのjarゴールという意味です。プラグイン、ゴールについてのドキュメントは、Mavenのドキュメント→Referece→Pluginsにあります。jarプラグインの場合はさらにCore Plugins→Maven Jar Plug-inとリンクを辿リます。jarプラグインページ(ここ)のGoalsでゴール一覧が閲覧できます。また、Propertiesで設定一覧が閲覧できます。

jarゴールを実行すると、targetディレクトリ以下にjarファイルが作成されます。

Webアプリケーションのビルド

WARファイルの作成には、warプラグインを利用します。

maven war:war

まず、準備としてsrc以下にwebappディレクトリを作成します※1。ここにJSPやWEB-INF/web.xmlなどを作成します。

+--project.xml         
+--project.properties  
+--src/
|   +--conf/
|   +--java/           
|   +--test/           
|   +--webapp/

※1 warプラグインのプロパティーで設定可能

warゴールを実行すると、target以下にwarファイルが作成されます。

Webサイトのビルド

ここまでだと、単にテンプレートのビルドファイルが用意されているのね、ふ〜ん、という感じですが、次のプラグインは圧巻です。siteプラグインで、プロジェクトのWebサイトを構築します。次のゴールを実行します。

maven site:generate

このゴールを実行することで、次のような様々な情報を含むWebページが作成できます。カスタマイズしなければ、簡単です。是非試してみてください。

画面 作成されたHTML

感想

MavenはAntと比較して、やりたいことがすぐできるように設計されているように思えます。これはMavenの「ゴール」がAntの「ターゲット」より粒度の大きな処理を提供しているからでしょう。また、デフォルトでプロジェクトのディレクトリ構造が決まられており(カスタマイズも可能です)、あまり悩まずに、お手本に倣ったプロジェクトを作成することが出来ます。また、Mavenでは、プラグインという形で、様々な他のプロダクトのFacadeが提供されているように思えます。Mavenの背後で、Ant、Gump、XDocletなどが動作していますが、開発者は裏で動くプロダクトの詳細については知らなくていいようになっています(全く知らなくていいわけではありません)。拡張性という点では、Jelly(XMLで記述するスクリプト的な言語)やAntタスクを記述することが可能で、またプラグインも作成できます。

例によって、ほんの触りしか試していません。実際にプロジェクトに適用する場合には、いくらかのカスタマイズが必要でしょう。それがどれくらい簡単なのか、手間なのか、IDEとの連携はどこまで可能なのか、などがわからないとMavenを評価したとは言えませんが、なんとなく便利そうだと思いました。

参考

本家
http://maven.apache.org/

Ja-Jakarta翻訳
http://www.ingrid.org/jajakarta/turbine/jp/turbine/maven/

WebDB Press Maven によって変わるプロジェクトの管理と運営(雑誌)
http://www.gihyo.co.jp/magazines/wdpress/archive/Vol16/

Mavenを使った開発Maven - 紹介マニアMoinMoindW : Java technology : プロジェクト管理: Maven... | Java World Jakarta活用指南(2002年12月号、2003年1月号) | その他Maven本家からWeb上の記事にもリンク多数(英語)

未調査(やっときたいこと)


Top