Mavenに触ってみました。

Maven(メイベン - 達人)

MavenApache Software Foundation で開発されているJavaベースのプロジェクト管理ツール。

Mavenはソフトウェア開発プロジェクトをPOM(Project Object Model)というモデルで
プロジェクトを管理する。
管理するプロジェクトの単位は、最終的に1つのJarファイルを生成する規模を想定している。

project.xmlで以下のような情報を管理する。

インストール

アーカイブを公式サイトからダウンロードする。
http://maven.apache.org/

②展開したディレクトリへのパスを「MAVEN_HOME]という環境変数へ定義する。
 (${MAVEN_HOME}/binへパスを通す。)

③ローカルリポジトリの初期化を行う。
 成功すると、リポジトリへJarが格納される。

mkdir ${MAVEN_HOME}/repo
install_repo.bat ${MAVEN_HOME}/repo
実行

Mavenは、引数にゴールを渡してあげることで実行される。
ゴールとは、Antのターゲットのようなものである。
異なる点としては、Antはガリガリとターゲットを記述する必要があることに
対して、Mavenではプラグインとしてあらかじめいくつかのゴールが定義されている。
(当然、自前でゴールを定義することも可能。)

【実行方法】

maven <プラグイン名>:<ゴール名> 


①サンプルプロジェクトを生成する。
 Sampleというディレクトリを作成し、その中で「genapp」というゴールを実行する。
 

$ mkdir sample
$ cd sample/
$ maven genapp

すると、Sampleへ以下のようなディレクトリが作成されます。

└─src
    ├─conf
    ├─java
    │  └─example
    │      └─app
    └─test
        └─example
            └─app

コンパイルする。
 targetというディレクトリが新たに生成され、クラスファイルが作成されました。

$ maven java:compile
$ tree

├─src
│  ├─conf
│  ├─java
│  │  └─example
│  │      └─app
│  └─test
│      └─example
│          └─app
└─target
    └─classes
        └─example
            └─app

③テストする。
 test-classes、test-reportsというディレクトリが新たに生成され、クラスファイルと
 テスト結果のレポートファイルが作成されました。
 コンパイルでは、テストクラスはコンパイルされないみたい。
 (java:compileする前にいきなりtestをすると、コンパイルした後でテストをしてくれるらしい。)

$ maven test
$ tree

├─src
│  ├─conf
│  ├─java
│  │  └─example
│  │      └─app
│  └─test
│      └─example
│          └─app
└─target
    ├─classes
    │  └─example
    │      └─app
    ├─test-classes
    │  └─example
    │      └─app
    └─test-reports

④サイトを作成する。
 Javadocの他にもなんかいろいろできました。。
 すげーな。

$ maven site
$ tree
├─src
│  ├─conf
│  ├─java
│  │  └─example
│  │      └─app
│  └─test
│      └─example
│          └─app
└─target
    ├─classes
    │  └─example
    │      └─app
    ├─docs
    │  ├─apidocs
    │  │  ├─example
    │  │  │  └─app
    │  │  │      └─class-use
    │  │  └─resources
    │  ├─images
    │  │  └─logos
    │  ├─style
    │  ├─xref
    │  │  └─example
    │  │      └─app
    │  └─xref-test
    │      └─example
    │          └─app
    ├─generated-xdocs
    ├─javadoc
    ├─linkcheck
    │  └─docs
    ├─test-classes
    │  └─example
    │      └─app
    └─test-reports
project.properties

 クラスファイルの出力先を指定する。
 標準は、「target/classes 」。
 

 テストクラスファイルの出力先を指定する。
 標準は、「target/test-classes 」。
 

 リモートリポジトリの場所を指定する。

 targetディレクトリの場所を指定する。

 Checkstyleの設定ファイルを指定する。

  • maven.docs.outputencoding

 リポートファイルを生成する際のエンコーディングを指定する。
 指定しないと化けます。。

その他

 Mavenでは依存関係にあるJarファイルをリモートリポジトリ 2 より取得する仕組みになっている。
 project.xmldependency要素に定義されたライブラリがローカルに存在しなければ、リモートリポジトリから取得する。
 デフォルトのリモートリポジトリは、「http://www.ibiblio.org/maven/」。

 リモートリポジトリから取得したライブラリをキャッシュしておくローカルのディレクトリ。
 標準は、「$HOME/.maven/repository」 。
 ローカルリポジトリへ自前のJarを登録する場合は、以下のような構成でJarを格納する。

$HOME/.maven/repository/MyJar/jars/MyJar-01.jar
Maven Repo Search

dependencyのidやversionを設定するのに便利。
http://maven.ozacc.com/search