Murayama blog.

AIの民主化。

ほぼはじめてのMaven

Javaを触る機会が増えてきて嬉しい今日このごろ。
思えばここ数年、お仕事では.NETの案件とか教育事業の案件とかで、
家に帰ってからはRubyやらActionScriptやらiPhoneやら流行ものに流され続け、
30歳にして再びJavaに帰ってきたかんじ。
ちょうど良いのでこれからもう一度Javaについて勉強していこうと思います。
と、前置きが長くなったけど、今日はMavenを触ってみる日にします。

Mavenとは

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

http://maven.apache.org/

Apache Mavenはソフトウェアプロジェクトマネージメントもろもろを包括的に扱うツールです。
MavenはPOM(Project Object Model)をベースに構成されています。
Mavenはプロジェクトのビルドを管理し、それらの情報をドキュメントとして出力します。

インストール

サイトからMaven 2.2.1をDL。
http://maven.apache.org/download.html


MacにMaven2をインストールする - Fight the Future
へびのぬけがら: Mac OS XにMaven2をインストール
上記のサイトを参考にアーカイブを展開し、環境変数を設定。

export MAVEN_HOME=/usr/local/apache-maven-2.2.1
export PATH=$MAVEN_HOME/bin:$PATH


そんで動作確認。

/Users/masahiko/work_mvn% mvn --version
Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)
Java version: 1.5.0_16
Java home: /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
Default locale: ja_JP, platform encoding: UTF8
OS name: "mac os x" version: "10.5.7" arch: "i386" Family: "unix"
/Users/masahiko/work_mvn% 

と、Javaのバージョンが1.5だったということで今気づく。まー今はこのままでやってみる。

Mavenプロジェクトの作成

作業フォルダに移動して、Mavenでプロジェクトを作成してみる。
手元にある書籍を参考に、以下のコマンドを実行。

mvn archetype:create -DgroupId=com.example.app -DartifactId=app -Dversion=0.0.1

オプションの意味とかはあとで説明するとして、
上記のコマンドを実行すると、必要なライブラリのインストールが自動で始まる。
インターネットからいろいろDLされてるのがログでわかる。
EMobileががんばってくれてる。
なんだか気持ち良い。


無事にコマンドは終了し、appという名前のフォルダが作成される。
treeコマンドで見るとこんなかんじ。
pom.xmlが肝っぽいのでこれから調べる。
あとは、srcフォルダ下にプログラムを開発するためのmainフォルダと、テストコード用のtestフォルダに分かれているのを確認。

% tree
`-- app
    |-- pom.xml
    `-- src
        |-- main
        |   `-- java
        |       `-- com
        |           `-- example
        |               `-- app
        |                   `-- App.java
        `-- test
            `-- java
                `-- com
                    `-- example
                        `-- app
                            `-- AppTest.java

Mavenの規約は以下のとおり。


とりあえず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>com.example.app</groupId>
  <artifactId>app</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1</version>
  <name>app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>


groupId、artifactId、versionタグは、

mvn archetype:create -DgroupId=com.example.app -DartifactId=app -Dversion=0.0.1

に指定したオプションから決まってるみたい。
ちなみに

  • groupId・・・アーティファクトを作成した組織のID
  • artifactId・・・groupIdで指定した組織の作るアーティファクトのID
  • version・・・アーティファクトのID

アーティファクトとは

書籍から引用。

Mavenの世界では、ソースコードから、コンパイル、ユニットテスト、統合テスト、アーカイブといった行程を経て作成されるプロジェクトの成果物であるファイルのことをアーティファクトと呼ぶ。

アーティファクトという言葉の定義は抽象的であり、
実際には実行コードとなるJARファイルやWARファイル、EARファイルを指したり、
JavaDocやソーソコード自体を指す事もある。*1

コンパイル

ここまででappプロジェクト下には、App.javaというJavaソースコードが作成されてるのでそいつをコンパイルしてみます。

mvn compile

初回起動時には、必要なライブラリの追加インストールが始まる。
でコンパイルは無事終了。

ユニットテスト

appプロジェクト作成時にApp.javaとあわせてAppTest.javaというテストコードも作成されてるので、そいつを実行してみます。

mvn test

例の如く初回起動時には必要なライブラリが追加インストールされる。のでちょっと待つ。
テストコードの実行も無事終了する。
ちなみにmvn testを実行するとコンパイルも合わせて実行される。

Jarファイルの作成

続いてクラスファイルをアーカイブしてJarファイルを作成します。

mvn package

初回起動時のみ必要なライブラリが追加されるのは言うまでもない。。のでちょっと待つ。


つづく。

参考書籍

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

Apache Maven 2.0入門 Java・オープンソース・ビルドツール

*1:この場合はバイナリファイルと区別してセカンダリ・アーティファクトと呼んで区別する