Eclipse 3.4.2とm2eclipseでMavenを使ったJavaのライブラリ管理

Maven2のロゴ

先日、後輩向けにJavaの事始からWicketのあたりまでざっと話をしたのですが、その中で触れたm2eclipseのインストールと使い方についてまとめておきます。
今回の記事ではライブラリ管理についてのみ言及しています。
Eclipseのバージョンは3.4.2でWTPが最初から入っている「Eclipse IDE for Java EE Developers」を使っていますが、3.4.x系なら同じようにできると思います。Pleiadesを使って日本語化していますので、デフォルトの英語のままの方は適当に読み替えてください。
全体的にWebからダウンロードする作業が多いので結構時間がかかりますが、2回目以降はもっと早くなります。
まだ使い始めたばかりの拙い知識で書いているので、間違いやもっとよい方法がある場合はぜひぜひご指摘ください。

1. Mavenとは

MavenとはApache Software Foundationで開発されているJavaのソフトウェアプロジェクト管理ツールです。
Maven は Project Object Model (POM) という考え方に基づき、プロジェクトのビルド、テスト、ドキュメンテーション、成果物の配備など、プロジェクトのライフサイクル全体を管理します。プロジェクトのビルドツールである Ant とは異なり、Maven はプロジェクト管理ツールとして、プロジェクトに関する色々な情報を POM に集約し、POM の情報に基づきプロジェクト全体を管理します。

1. Maven とは | TECHSCORE(テックスコア)

最近のJavaの開発ではデファクトスタンダードになりつつあるようです。
私自身Mavenを使い始めたのは結構最近です。というのも、EclipseNetBeansのようなIDEを使っているとビルドやテストやパッケージ化などもサポートしてくれるためあまりMavenのよさがわからなかったことやpom.xmlを書くのが面倒くさかったりしたからです。しかし、ライブラリ管理やIDEを起動しなくてもビルドやテストを行うことができるなど多くのメリットがあることが実際に使ってみるとわかると思います。
ちなみにm2eclipseのデフォルトのローカルレポジトリは「C:\Documents and Settings\ユーザ名\.m2」になります。


2. m2eclipseのインストール

1. Eclipseを起動して、「ヘルプ」>「ソフトウェア更新」を選ぶ
2. 「使用可能なソフトウェア」タブを開く
3. 「サイトの追加」ボタンを押して、「http://m2eclipse.sonatype.org/update」を入力してOKを押す
4. 下記のようにインストールするものにチェックを入れた後に、「インストール」ボタンを押す

5. 後はウィザードに従って進めていくとインストール開始
6. インストール終了すると再起動を求めるダイアログが出てくるので、「はい」を選んで再起動する
これでm2eclipseのインストール作業は終了です。
再起動をすると以下の図のようにインデックスの更新が行われますが、ダウンロードを伴うので少し時間がかかります。インデックス更新の途中で中止したりして失敗するとこれから紹介するm2eclipseの機能が一部うまく動かないことがありますが、その場合はEclipseを再起動してインデックスの更新を再度行えばうまくいくかもしれません。


Mavenコンソールが表示されない場合、コンソールの右上の「コンソールを開く」を押して「Maven Console」を選択してください。

以下のような警告が出た場合、

eclipse.iniの一行目に

-vm
C:\Program Files\Java\jdk1.6.0_11\bin\javaw.exe

を追加してください。JVMの位置は自分の環境に合わせて変更してください。今回の紹介する内容ではこの作業は行わなくてもよいです。


ちなみにEclipseを起動するたびにインデックスの更新が行われます。初回よりも速くなりますが、インデックスの更新が行われるのがわずらわしい人は以下のように設定すると起動時に更新が行われなくなります。
1. 「ウィンドウ」>「設定」を選ぶ
2. 「Maven」を選択して、「始動時にレポジトリー・インデックス更新をダウンロード」のチェックを外して「OK」ボタンを押す
手動で更新を行う場合は、「設定」の「Maven」>「インストール」を開いて「ローカル・レポジトリー索引再作成」ボタンを押してください。


3. Mavenプロジェクトを作成

「ファイル」>「その他」を選択して、以下のように「Maven Project」のウィザードを開始してください。

今回はアーキタイプを使わずにプロジェクトを作成するので、一枚目のウィザードで「シンプルなプロジェクトの作成」にチェックを入れてください。
次のウィザードの必須部分である「グループ Id」に「test」、「アーティファクト Id」に「first-maven」と入力して「完了」ボタンを押すとプロジェクトが作成されます。
グループ Id(groupId)はプロジェクトを一意に識別する名前で、プロジェクトのルートパッケージ名を指定するのが一般的です。
アーティファクト Id(artifactId)はプロジェクトの成果物の名前です。JARやWARにつける名前を指定してください。
作られたフォルダ構成がMavenプロジェクトの一般的なフォルダ構成です。別のフォルダ構成でもMavenを使うことができるようですが、特別な理由がない限りはこの構成に従ったほうがよいです。

first-maven
├  pom.xml
├  target
└─src
    ├─main
    │  ├─java
    │  └─resource
    └─test
        ├─java
        └─resource
名前 役割
pom.xml プロジェクトの情報を持つファイル
target 成果物を置くフォルダ
src/main/java Javaソースコード
src/main/test Javaのテストコード

特に重要なのはpom.xmlで、テキストエディタで開いてみると以下のような情報が現在書いてあります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>first-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

ここにプロジェクトの依存ライブラリやビルドの情報などを追記していくのがMavenプロジェクトの特徴です。


4. ライブラリの追加と削除

m2eclipseを使うとセントラルレポジトリに登録されているライブラリを簡単に追加することができます。
今回はCommons Langを追加してみます。
以下の図のようにプロジェクトの上で右クリックをして「Maven」>「依存関係の追加」を選択してください。

ダイアログの入力フォームに「commons-lang」と入力すると、インデックスの作成がうまくいっていれば、インクリメンタルにセントラルレポジトリに追加されているライブラリを検索できます。
ライブラリはデフォルトではもっとも最新のバージョンのものが選択されていますが、Commons Langは変わった名前のバージョンのものがひとつあるのでツリーを開いて以下のように2.4を選択してOKを押して下さい。

OKを押すとライブラリと依存ライブラリのダウンロードを開始します。ローカル・レポジトリーにすでにある場合は高速にライブラリの追加を行うことができます。
pom.xmlを開くと以下のようにdependencies要素が追加されていることがわかります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>first-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>commons-lang</groupId>
  		<artifactId>commons-lang</artifactId>
  		<version>2.4</version>
  	</dependency>
  </dependencies>
</project>

Mavenではこのようにdependencies要素の中にdependency要素を追加していくことで依存ライブラリの管理を行います。
今回はフォームから検索して追加しましたが、pom.xmlに手動でdependency要素を追加しても依存ライブラリが自動的に追加されます。
依存ライブラリを削除する場合はpom.xmlテキストエディタで開いてそのdependency要素の部分を消して保存するとOKです。
実際に作業をしてもらうとわかると思うのですが、これだけ簡単にライブラリの管理ができるのは画期的です。PerlCPANなどとは異なり、新しいライブラリを追加してもその影響範囲はプロジェクトに限定されるのもいいところだと思います。


5. アーキタイプWicketの開発を始める

アーキタイプ(archetype)とは原型という意味で、Mavenではこれを使うことでフレームワークなどを利用したアプリケーションを作る際の最低限の構成を持ったプロジェクトを作成でき、開発の開始の時間的なコストを大幅に削減することができます。
「ファイル」>「新規」で「Maven Project」を選択してください。
「ファイル」>「その他」を選択して、以下のように「Maven Project」のウィザードを開始してください。
今回は一枚目のウィザードの「シンプルなプロジェクトの作成」にチェックを入れないでください
二枚目のウィザードで「カタログ」に「Nexus Indexer」を選択してフィルターに「wicket」と入力すると1つのアーキタイプに絞り込まれると思います。

「Show the last version of Archetype only」のチェックを外すと最新のライブラリのバージョン以外のアーキタイプを選択することができます。今回はバージョン1.3.5をのアーキタイプを選択して「次へ」を押してください。

最後のウィザードは「グループ Id」には「test.wicket」、「アーティファクト Id」には「first-wicket」、「パッケージ」には「test.wicket」を入力して「完了」ボタンを押してください。
これでWicketの最小限の設定とライブラリを持つプロジェクトが作成されました。
Javaコンパイラのバージョンが1.4になっている場合があるので、そのときはプロジェクトの上で右クリックして「プロパティ」を選択して、「Javaコンパイラー」のコンパイラ準拠レベルを変更してください。

m2eclipseでアーキタイプを使うことのデメリット

今回のwicket-quick-startの場合だとプロジェクト・ファセットの動的Webプロジェクトのバージョンが2.4で作られてしまいます。
Tomcatだと6以降のバージョンでないとこれに対応していないため、デプロイを行うことができません。開発環境によってはこの設定だと困るという人もいると思いますが、後から変更することもできないようです。コメントにて変更方法のご指摘がありました。

6. jettyをサーバとして起動

先ほど作成したwicket-quick-startのアーキタイプを利用したプロジェクトは動的ウェブプロジェクトとして作られているので、WTPで扱うことができます。Tomcatなどのサーバにプロジェクトを追加することができますが、Mavenでは自分でインストールする必要なしにJettyプラグインを用いることでサーバを利用することができますので、今回はこれを利用してみます。
メニューの「実行」>「実行の構成」を選択します。
左側の一覧の中から「Maven Build」の上でダブルクリックを押すと新規構成を追加することができます。

「名前」を「Jettyで実行」に変更してください。
次に「基底ディレクトリ」を、「ワークスペースの参照」で先ほどの「first-wicket」プロジェクトを選択してください。
「ゴール」を、「選択」を押して上部のフォームに「jetty」と入力してフィルタを実行してから「jetty - org.morbay.jetty:maven-jetty-plugin」の「run」を選択してください。

「実行」ボタンを押すと必要なプラグインのダウンロードが開始します。
ダウンロードが終了してJettyサーバが起動したら、ブラウザからhttp://localhost:8080/first-wicket/ にアクセスすると以下のようなWicketで生成されたページを見ることができます。


7. 結びに

今回はライブラリ管理についてしか触れていませんが、この点だけでもMavenを導入するメリットが十分あることがわかっていただけたのではないかと思いますのでぜひMavenを試してみてください。
ちなみにMaven2を扱った日本語の本では、2年前なので若干内容が古いかもしれませんが以下の本が入門書としてよいと思います。

Apache Maven 2.0入門 Java・オープンソース・ビルドツール
野瀬 直樹 横田 健彦
技術評論社
売り上げランキング: 48734


おまけ:セントラルレポジトリにないライブラリを追加する方法

ActiveObjectsの場合

ActiveObjectsはdev.java.netで公開されていますが、ここの場合ですとMavenの公開方式にしたがっているレポジトリのため以下のようにrepositories要素を追加することですることでライブラリを追加することができます。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>first-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <repositories>
      <repository>
        <id>maven2-repository.dev.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
      </repository>
  </repositories>
  <dependencies>
    <dependency>
      <groupId>net.java.dev.activeobjects</groupId>
      <artifactId>activeobjects</artifactId>
	  <version>0.8.2</version>
    </dependency>
  </dependencies>
</project>
Butterfly Persistenceの場合

Butterfly PersistenceはMaven形式のレポジトリを提供していません。こういうライブラリをMavenで扱う場合、ローカルレポジトリに手動でライブラリを追加することで対処します。
Mavenをインストールした状態で、Betterfly PersitenceのJARをダウンロードしてからコマンドプロンプトで以下のコマンドを実行してください。

mvn install:install-file -Dfile="C:/java/lib/jenkov-butterfly-persistence-5.0.0.jar(JARのパス)" -DgroupId=com.jenkov.butterfly -DartifactId=butterfly-persistence -Dversion=5.0.0 -Dpackaging=jar

ローカルレポジトリに登録した後は以下のようなdepencency要素をpom.xmlに追加すると依存ライブラリを追加できるようになります。

<dependency>
  <groupId>com.jenkov.butterfly</groupId>
  <artifactId>butterfly-persistence</artifactId>
  <version>5.0.0</version>
</dependency>