皆さん、ビルドツールは何をお使いでしょうか? Java開発におけるビルドツールといえば、Antが有名でしょう。しかし、最近、Antに代わるビルドツールとしてApache Mavenが地道に注目を集めてきています。
編集部注:Antについて詳しく知りたい読者は、連載「現場に活かす Jakarta Project」の第2回「AntでJavaのビルドを簡単にする」をご参照ください。
本稿では、連載「CoolなEclipseプラグイン」の番外編として、前後編に分けてMavenの概要とEclipse上でのMaven利用をサポートするプラグイン「q4e」を紹介します。
「Maven」(メイヴェン、メイヴン)は、Antと同様に、プログラムのコンパイル、テスト実行、パッケージングなどのソフトウェア開発における一連の作業を自動化するためのツールです。ただし、Mavenは、Antにはない以下のような優れた特徴を持っています。
プロジェクトに必要なライブラリのバージョン不整合で問題になったことはありませんか?
開発者各人がライブラリを1つ1つ手作業でダウンロードして開発環境を準備していれば、そのような問題も必然的に起こってしまいます。これに対して、Mavenではプロジェクトが依存しているライブラリ群を「バージョンの整合性のある状態で」自動的にダウンロード・利用できるようになります。
Antのビルド・スクリプト(build.xml)は、自動化したい作業が増えたり、規模が大きくなるにつれ、その記述・保守の作業の手間が大きくなってきます。
Mavenでは複雑なビルド作業でも、スクリプトを一から作ることなく、簡単に自動化できます。「ビルド手順は大体こうすべき(した方がよい)」「標準のディレクトリ構成」といった取り決めに基づいていることが、これを可能にする大きな理由になっています。
Ruby on RailsやSeasarなどの最近のフレームワークは、“規約”を設けることにより設定ファイルを減らす「Convension over Configuration(設定よりも規約)」を採用していますが、2004年に最初の安定バージョンがリリースされているMavenはその先駆けといえるでしょう。
編集部注:Ruby on Railsついての詳細を知りたい読者は、記事「Javaから見たRuby on Rails」を、Seasarについては、連載「Seasar Projectの全貌を探る」を、それぞれご参照願います。
Mavenは、コンパイルやテスト実行などのビルドの基本的な作業のほかに、以下の実にさまざまな作業を支援するプラグインを提供しています。
・テスト実行結果やカバレッジ測定結果のレポート生成
・CheckStyle/PMDなどのソースコードチェックツールの実行とレポート生成
・リモートサイトへのデプロイ
・アプリケーション・サーバの起動
・プロジェクトのWebサイト生成
レポート生成のプラグインについては、後述します。
編集部注:CheckStyleプラグインついての詳細を知りたい読者は、記事「コーディング規約に従わないコードを検索する」を、PMDプラグインについては、記事「Eclipseで使える静的解析ツール」を、それぞれご参照願います。
Mavenでは、上述の特徴を実現するための重要な仕組みとして、POM(Project Object Model)とリポジトリがあります(図2)。後述するq4eプラグインを利用するうえで重要なため、ここで簡単に説明します。
POMは、Antでいうところのビルド・スクリプト(build.xml)に代わるものといえます。ただし、スクリプトのように処理をそのまま記述する形ではなく、大まかなビルドプロセスはほぼ固定のままにして、プロジェクトごとに異なる部分だけをパラメータとしてPOMファイルと呼ぶXMLファイル(pom.xml)に定義します。
いい換えれば、「大きな処理の流れとしては可能な限り再利用して、違うところだけちょっと書きましょう」というスタイルになっており、これが「ビルド・スクリプト要らず」を実現しています。
POMファイルには、主に、プロジェクトを識別するための情報や、プロジェクトが依存するライブラリなどが記述されます。
Mavenでは、プロジェクトに必要なライブラリを「依存関係も考慮して」自動的にダウンロードしてくれる機能があります。これは「リポジトリ」機能により実現されています。
リポジトリには、「リモートリポジトリ」と「ローカルリポジトリ」とがあり、リモートリポジトリはネットワーク越しに提供されているリポジトリで、通常、Mavenプロジェクトがあらかじめ提供している「セントラルリポジトリ」を利用します。
また、ローカルリポジトリはリモートリポジトリのキャッシュとして働くリポジトリで、Mavenを実行しているローカルマシンに作られます。ローカルリポジトリは、デフォルトでは「ユーザーディレクトリ/.m2/repository」に作られます。
そのほか、Mavenを使ううえで知っておくべきことがまだありますが、後述のq4eプラグインを実際に利用する説明の中で触れていきます。また、Mavenの詳細についてはMavenのWebサイトを参照してください。
Eclipse上でMaven利用をサポートするプラグインとしてはm2eclipseが有名ですが、Eclipse公式のMavenプラグインを目指した、q4e(Q for Eclipse)プラグインが「Google Code」という開発ホスティングサービスで開発されています。
編集部注:開発ホスティングサービスについて詳しく知りたい読者は、記事「ソースコードの宝石箱、●●Forgeを見逃すなかれ」をご覧ください。
q4eは、The Eclipse Integration for Apache Maven(Eclipse IAM)として、Eclipseプロジェクトへプロポーザルが提出されました。順調にいけばeclipse.orgで提供されることになり、まさにEclipseの公式Mavenプラグインになります。
ちなみにq4eは、著名なスパイ映画「007」シリーズに登場し、数々の秘密兵器を開発する人物「Q」にちなんで名付けられています。
q4eが「Eclipse公式のMavenプラグイン」にするために開発が行われていることは、将来性の意味でもm2eclipseとの大きな違いといえます。また、m2eclipseになくq4eにある機能としては、以下があります。
ただ、m2eclipseとq4eの機能比較サイトを見ても分かるように、現時点ではm2eclipseの方が機能的に有利といえます。
しかし、両プラグインの開発者は、それぞれの内部で利用されている「Maven Embedder」というMavenライブラリの開発で協力し合っているため、今後、両者のいいところがマージされていくことに期待したいところです。
なお、m2eclipseについては、CoolなEclipseプラグイン(11)「ビルドを効率化するEclipseプラグイン」を参照してください。
q4eプラグインをEclipseで利用するにはまず、下記のアップデートサイトからプラグインをダウンロードします。
・http://q4e.googlecode.com/svn/trunk/updatesite/
なお、q4eプラグインには「Maven Embedder」というMaven 2.1ベースのMaven実装が入っています。よって、q4eプラグインをインストールすればMavenはインストールする必要がありません。一方で、ビルドツールの性格上、コマンドラインでMavenを実行したい場合もあるかもしれません。その場合は別途MavenのWebサイトからダウンロードしてインストールしてください(コラム「Mavenのインストール」参照)。
以降、2008年3月の本稿執筆時の最新バージョンであるq4e 0.5.0の利用を前提として説明します。q4eプラグインは現時点でまだ開発途中のため多少不安定な部分も残っていますので、保険としてコマンドラインからMaven実行できる環境を準備しておくのもよいでしょう。
MavenのWebサイトからアーカイブ・ファイルをダウンロードし、任意のディレクトリに展開します(ここでは、「%M2_HOME%」とします)。そして、以下の環境変数の設定を行います。
環境変数 | ディレクトリ名 |
---|---|
PATH | %M2_HOME%\bin |
JAVA_HOME | JDKのインストール先(例えば、C:\Program Files\Java\jdk1.6.0_05など) |
表1 「Maven2メニュー」と対応するMavenコマンド |
上記完了後、コマンドプロンプトから以下を実行し、バージョン番号(2.0.8など)が表示されることを確認してください。
> mvn -version
q4eの動作に関する設定は、Eclipseメニューの[設定]→[Maven]から行うことができます(図5)。
リモートリポジトリにアクセスしないで実行できるようにするオフライン設定[Work offline]や、ローカルリポジトリの場所やプロキシ設定に利用するMavenのsettings.xmlファイルの指定[User settings XML]などが行えます。
なお、settings.xmlで設定できる項目については、Mavenサイトの「Settings Reference」をご覧ください。
いよいよ次ページからは、q4eを使ったMavenの簡単な利用法を解説していきます。
Copyright © ITmedia, Inc. All Rights Reserved.