Maven2の基本

| # Comments | 2 Trackbacks
Maven2では、1つの成果物(=artifact/アーティファクト、jar/warファイルなど)を管理するために1つの「プロジェクト」が対応します。
このプロジェクトは、1つのpom.xmlファイルと、原則として決まった構成のディレクトリ群からできています。

+ project
    + src
        + main
            + java
            + resources
          ( + webapp )
        + test
           + java
           + resources
    + target
        + classes
        + test-classes
    - pom.xml

以下では、pom.xmlファイルの基本とそれぞれのディレクトリについて、またMaven2の基本的なコマンドについて見ていきます。

pom.xml

pom.xmlは、Maven2管理プロジェクトの設定をすべて引き受けているファイルです。
このファイルに様々な設定を追加することで、便利なMaven2プラグインや、依存ファイルの自動解決などの機能を利用することができます。

pom.xmlファイルに最低限必要な記述は以下のとおりです。

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>${groupId}</groupId>
    <artifactId>${artifactId}</artifactId>
    <version>${version}</version>
</project>

Maven2の成果物は、groupId / artifactId / versionという3つのパラメータで1元的に表されます。

groupId

この成果物がどのグループに所属するのかを示します。
基本的には、Javaのパッケージ名と同じ命名規則により、この成果物が利用するベースパッケージ名と同じものが使われることが多いです。
組織でつける場合には、その組織やサービスで利用できるパッケージ名(組織やサービスのドメイン名を逆順で並べたもの)+α(案件名など)を使うことになります。
例えば、st.happy_camper.sample など。

artifactId

この成果物の名称を示します。
当該グループ内で意味を持つ一意の名称をつけます。groupIdに案件名を付加している場合には、artifactIdの接頭語としてもつけておいた方が名前の衝突がなくていいと思います。
成果物の物理ファイル名の一部として利用されます。
例えば、sample-dao / sample-logic / sample-webapp など。

version

この成果物のバージョンを示します。
${majorVersion}.${minorVersion}.${buildVersion}(-SNAPSHOT) というバージョンを使うことが多いようです。
SNAPSHOTは、次のバージョンへ向けての途中段階という特別なバージョンで、開発をしている側のためのバージョンです。利用側はSNAPSHOTのついていないバージョンを利用することになります。

ディレクトリ構成

Maven2プロジェクトでは、上記で示したように、原則としてディレクトリ構成が固定されています。(pom.xmlの設定によって変更することは可能です。)

src/main/java

Javaのソースファイルを格納するためのディレクトリです。
成果物には、このディレクトリ内のクラスが含まれます。

src/main/resources

ソースファイルではない設定ファイルなどを格納するためのディレクトリです。
成果物には、このディレクトリ内のファイルが含まれます。

src/main/webapp

pom.xmlの設定packagingをwarにした場合に利用されるWebアプリ用のファイルを格納するためのディレクトリです。
src/main/webapp/WEB-INF/web.xml ファイルは必須です。

src/test/java

JUnitなどのテスト用のJavaファイルを格納するためのディレクトリです。
テストフェーズではこのディレクトリ内のテストが実行されますが、成果物にはこのディレクトリ内のクラスは含まれません。

src/test/resources

テストで利用する設定ファイルなどを格納するためのディレクトリです。
テストフェーズではこのディレクトリ内のファイルを利用することができますが、成果物にはこのディレクトリ内のファイルは含まれません。

target

Maven2によって生成された結果を格納するためのディレクトリです。
mainのJavaファイルコンパイル結果(→target/classes)、testのJavaファイルコンパイル結果(→target/test-classes)、最終成果物などが格納されます。
Maven2のコマンドによって自動生成されるので、SCMを利用している場合にはこのディレクトリは管理対象外にすべきです。

フェーズ

Maven2では、Javaプログラムの構築手順としてフェーズという概念を持っています。

Javaプログラムを構築する際には、ザックリいうと

  1. ソースコードを書く
  2. コンパイルする
  3. テストする
  4. パッケージングする(jar/warにまとめるなど)
という手順を踏みます。
これらの手順をフェーズといいます。

Maven2への指示は基本的にこのフェーズを元に行います。

compile

Javaプログラムをコンパイルし、関連するリソースがある場合にはコピーします。

$ mvn compile

test

テストコードをコンパイル、関連するリソースがある場合にはコピーし、テストを実行します。
前段のcompileが終わっていない場合には事前にcompileを行います。

$ mvn test

package

クラスファイル、関連するリソースを収集してjar/warファイルを生成します。
前段のtestが終わっていない場合には事前にtestを行います。

$ mvn package

clean

targetディレクトリを削除します。

$ mvn clean


それぞれのフェーズは並べることができ、Maven2は並べられた順番で各フェーズを実行していきます。
例えば

$ mvn clean package

とすると一旦targetを削除してからpackageを行う、という動作になります。

余談ですが、これは一旦targetを削除してpackageで全体をコンパイルしなおすのでpackage単体よりは重い処理になりますが、古いクラスファイルが残っていて動いているように見えることがあるため定期的にcleanすることをお勧めします。

トラックバック(2)

Maven2では、様々な種類のファイルを成果物として生成することができます。Ma... 続きを読む

Happy-Camper Street - プラグイン (2008年9月30日 00:44)

Maven2はプラグインを使って機能拡張ができるように設計されています。開発の基... 続きを読む

comments powered by Disqus

Twitter Icon

AdSense

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 5.14-ja

Google検索

カスタム検索

2013年10月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31