Mavenは、Rubyで言うところのrakeにあたる、Javaのプロジェクト管理ツールです。
おそらくデファクトスタンダードなはずですが、antから乗り換える動機が無いためあまりちゃんと勉強したことが無かったので改めてまとめてみました。

で、一番良く使うシンプルなWebアプリプロジェクトを作成してみます。

Mavenのインストール

Macだとhomebrewとかmacportsでお手軽にインストールできます。

Mavenプロジェクトの生成

$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
...
[INFO] Generating project in Interactive mode
Define value for property 'groupId': : com.example
Define value for property 'artifactId': : HelloMavenWebApp
Define value for property 'version':  1.0-SNAPSHOT: : 
Define value for property 'package':  com.example: : 
Confirm properties configuration:
groupId: com.example
artifactId: HelloMavenWebApp
version: 1.0-SNAPSHOT
package: com.example
 Y: : y
....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 45.392s
[INFO] Finished at: Fri Nov 01 14:27:49 JST 2013
[INFO] Final Memory: 7M/81M
[INFO] ------------------------------------------------------------------------

Maven プロジェクトを生成するコマンドは mvn archetype:generate です。
パラメータ archetypeArtifactId に archetype(Mavenプロジェクトのテンプレート)を指定します。
archetypeを指定しない場合は、コマンドライン上で選択できますが、数が膨大なので目的のテンプレートを探すのは困難です。
今回利用した maven-archetype-webapp はMavenの公式archetype(groupIdがorg.apache.maven.archetypes)です。
Introduction to Archetypes で確認できます。

必要なプロパティは、すべてプロプントで聞かれるので簡単にプロジェクトを生成できます。

  • groupId は、Javaでいつも使っているパッケージを指定します(例:com.co-meeting)。groupId は archetype を検索する際に条件にも利用できます。
  • artifactId は、プロジェクトの名前を指定します。
  • version は、今回はデフォルトのまま、Enter。
  • package は、通常groupIdと同じになるので、Enter。

プロジェクトをビルドして実行

$ cd HelloMavenWebApp/
$ mvn compile war:war

http://maven.apache.org/plugins/maven-war-plugin/usage.html

pom.xmlのbuildの下にpluginsを追加します。

  <build>
    <finalName>HelloMavenWebApp</finalName>
  <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
     </plugin>
   </plugins>
  </build>

注意: 似た名前の maven-jetty-plugin は古いので Jetty7以上を使う場合は jetty-maven-plugin をしていすること

jettyプラグインを実行

$ mvn jetty:run

http://localhost:8080/ にアクセスして “Hello World!” と表示されれば成功です。

Jetty9 を利用する場合は、org.eclipse.jettyのjetty-maven-pluginを利用する必要があります。

ただし、org.eclipse.jettyのプラグインはデフォルトのリポジトリには含まれていないため Maven の settings.xml に追加する必要があります。
settings.xmlについての説明は Settings Reference を参照してください。

.m2/settings.xml を以下のように記述します。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups>
   <pluginGroup>org.eclipse.jetty</pluginGroup>
  </pluginGroups>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

pom.xmlのpluginsを以下の用に書き換えます。

  <build>
    <finalName>HelloMavenWebApp</finalName>
  <plugins>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
     </plugin>
   </plugins>
  </build>

実行方法は同じです。

$ mvn jetty:run