minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

MavenはAntに代わるビルドシステムですが、
Antとは異なった設計思想になっている為
最初に使い始めるまでが大変です。

とりあえず、このページではMavenのインストールから
簡単なサンプルプロジェクトのビルドまでを説明します。

インストール

まず、Mavenのサイトからバイナリをダウンロードします。
Mavenのソースはここからはダウンロードできません。
CVS経由で行う必要がありますが、通常のMavenユーザならば
その必要も無いはずです。

インストールといっても、適当な場所に解凍するだけです。
ここでは、その場所を $MAVEN_HOME とします。
次に、$MAVEN_HOME/bin にパスを通します。
Linuxならば

% export PATH=$PATH:$MAVEN_HOME/bin

とします。

MavenはJavaで作成されているので
実行にはJavaが必要です。
JDKが無い環境では動きません。
JDK(1.4以上)をインストールして、環境変数 JAVA_HOME を設定します。

これで、インストールは完了です。

プロキシの設定

Antと大きく違うのがここです。
Mavenはネットワーク(HTTP)に繋がった環境で使う必要があるので
場合によってはプロキシの設定をする必要があります。
お使いのブラウザの設定を見て、プロキシを設定していないようならば
この項は飛ばして結構です。

設定ファイルは、~/.m2/settings.xml にあるので
これを修正します。無ければ新規作成しましょう。

<settings>
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
    </proxy>
  </proxies>
</settings>

こんな感じにします。
詳しい項目の内容は settings.xml解説 のページを参照して下さい。
設定ファイルのパスを見てわかるように、これは(Linux)ユーザ依存のファイルです。
いつもrootで作業している人などは
これを機に作業用のユーザを作成することを考えましょう。

これで、プロキシの設定は完了です。

サンプルプロジェクトの作成

Antの場合、既存のプロジェクトがあり
そこにbuild.xmlを作成して…という流れが一般的かと思いますが
Mavenではそのやり方は多少面倒なので、別のやり方で進めます。

まず、新規にサンプルプロジェクトを作成します。
適当なディレクトリに移動して、以下のコマンドを実行します。

% mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app

mvn というのが、Mavenの実行スクリプトです。
先程説明したように、このディレクトリにパスを通している必要があります。

最初に mvn を実行すると、Mavenは様々なファイルをHTTP経由でダウンロードします。
プロキシの設定がうまくいっていないと、ここで処理が先に進まなくなってしまいます。

ダウンロードされたファイルは ~/.m2/repository 以下に格納されます。
このダウンロード処理は初めだけで、以下はここに格納されたファイルが使用されます。
パスを見てわかるように、このファイルもユーザホームディレクトリ以下に
格納されるので、これらは全プロジェクトで共通して使われることになります。
通常、このディレクトリ以下のファイルを意識する必要はありません。

パス構成

さて、先程のコマンドを実行すると
カレントディレクトリの直下に my-app というディレクトリが作成されます。
その配下のパス構成は以下のようになっています。

.
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

「階層深っ!」と思う方もいるでしょう。
しかし、これがMavenのデフォルトパス構成なのです。
これが先程説明した「既存プロジェクトにbuild.xmlを作成して…」
といったAntとは異なる部分です。

Mavenで使用するプロジェクトは、パス構成をMavenで定められたものに
合わせる必要があるのです。
もちろん、これらは設定ファイルによって変更することも可能ですが
なるべくならば変更せずにMavenの流儀に合わせることをお勧めします。

なぜMavenがこういった設計になっているか、考えてみて下さい。
プロジェクト毎にバラバラのパス構成になっていることは
決して好ましい事実ではないのです。

各種ファイル

pom.xml というファイルが作成されています。
これが、Mavenのメインになる設定ファイルです。
Antのbuild.xmlに相当します。

src/main/java の下にJavaファイルが、
src/test/java の下にJUnitテスト用のJavaファイルが格納されています。

コンパイル

まずは、サンプルプロジェクトをコンパイルしてみましょう。

% mvn compile

ここでも、最初の実行時には多少の時間が掛かります。
コンパイルに必要なライブラリをいくつかダウンロードするからです。

target/classes ディレクトリが作成され、コンパイルされたclassファイルが
配下に格納されます。

テスト

JUnitによるテストを実行してみます。

% mvn test

テスト結果が標準出力に出力されます。

パッケージ作成

インストール、デプロイ用のパッケージ(デフォルトではjar)を作成します。

% mvn package

targetディレクトリ以下に、my-app-1.0-SNAPSHOT.jar というファイルが作成されます。
このファイル名は、pom.xml の内容によって自動的に生成されます。
Webアプリならばwarファイルになるでしょう。

パッケージのインストール

パッケージをインストールします。

% mvn install

デフォルトでは、インストール先は ~/.m2/repository 以下になります。
インストールされたパッケージは、他プロジェクトから参照するときに
利用されます。
つまり、先程ダウンロードした各種ライブラリと同じ扱いになります。

パッケージのデプロイ

パッケージをデプロイするには、pom.xmlに以下の要素を追加します。

<distributionManagement>
  <repository>
    <id>sample-repository-id</id>
    <url>file:///path/to/deploy</url>
  </repository>
</distributionManagement>

この例では、同一ファイルシステム上にデプロイします。
FTPやSSHを利用したデプロイも可能です。

デプロイするためのコマンドは、以下のようになります。

% mvn deploy