Maven導入の手引き

(1) mavenをインストールする

Apache Maven Project Home <http://maven.apache.org/>から本体をダウンロードします。
ダウンロードしたアーカイブを適当な場所に展開します。
[/usr/local]$ gunzip -cd maven-1.0.2.tar.gz | tar xvf -
環境変数 MAVEN_HOME=/usr/local/maven-1.0.2を定義します
PATH環境変数に$MAVEN_HOME/binを追加する。PATH=$MAVEN_HOME/bin:$PATH

maven -v で動作確認をします。(最初の起動で、ローカルリポジトリを構築します)
$ maven -v
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0.2

$

インターネット接続にプロキシ設定が必要な場合は、~/build.propertiesに以下の内容を記述して作成してください。
$ cat build.properties
# build.properties
# Proxy Setting
maven.proxy.host = xxx.xxx.xxx.xxx
(<-プロキシサーバのIPアドレス)
maven.proxy.port = 8080 (< -プロキシサーバのポート番号)

注意)対象となるプロジェクト(test:testゴールのテスト モジュールなど)が、大量のヒープを消費する場合、${MAVEN_HOME}/bin/mavenスクリプトのMAVEN_OPTSに "-server" を追加しないと、途中でコアダンプする。
さらに、メモリを消費するテストモジュールが含まれている場合、MAVEN_OPTSの"-Xms256m"を適切なサイズに調整する必要あり!

(2) sshの利用を公開鍵・秘密鍵を利用した方式にしておく

site:deployで各種レポート(javadoc, junitなどのレポート)を公開サーバにdeployする際、sshを利用します。
このとき、パスワード入力が必須だと、maven実行中に入力できないので、処理がとまってしまいます。それを避けるためsshをパスワードなしで利用で きるようにしておく必要があります。
$ ssh-keygen -b 1024 -t rsa -C username@192.168.0.1 (<-レポートを公開 するためのサーバのIPアドレス)
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): (<-なにも入力せずリターンする)
Enter same passphrase again: (<-なにも入力せずリターンする)
Your identification has been saved in /home/xxxxx/.ssh/id_rsa.
Your public key has been saved in /home/xxxxx/.ssh/id_rsa.pub.
The key fingerprint is:
bb:5f:cb:83:5a:b1:21:4c:bd:ed:26:b5:5f:9c:ce:2d username@192.168.0.1
$ scp ~/.ssh/id_rsa.pub username@192.168.0.1:.ssh/authorized_keys2
$

authorized_keys2が既にあるなら、作ったid_rsa.pubの内容を追加(append)します。
authorized_keys2は、自分だけが見れるようにしておきます。
[192.168.0.1]$ chmod 600 ~/.ssh/authorized_keys2

sshdeployを利用するためにproject.propertiesのmaven.usernameにsshログインするユーザ名を設定しておく必 要があります。

なお、公開サーバがビルド環境と同じサーバであるなら、site:fsdeployを利用すればよいでしょう。ファイルコピーでdeployされま す。 project.propertiesか、~/build.propertiesでmaven.site.deploy.method=fsで設 定しておきます。
(site:ftpdeployは、なぜかうまくいかなかった。)

(3) scm pluginに Subversion(svn) を利用できるようにする。

maven-1.0.2に含まれるmaven-scm-plugin -1.4では、CVSにしか対応していないので、以下のコマンドにて、 maven-scm-pluginのバージョンを1.5-beta-3にする必要があります。
# maven plugin:download -DgroupId=maven -DartifactId=maven-scm-plugin -Dversion=1.5-beta-3

注意)ビルド環境サーバにsvnクライアントもインス トールしておいてください。

(4) ローカルリポジトリの初期化

JDBCドライバなどの ibiblio(外部のリモートリポジトリ)からダウンロードできないライブラリは、ローカルリポジトリに登録しておきます。
LOCAL_REPOS=~/.maven/repository
jar 名称
配 置場所
ojdbc14.jar (Oracle JDBC Driver) $LOCAL_REPOS/jdbc/jars
dependencyに必要なjarファイルは、Maven Repo Search <http://maven.ozacc.com/>で検索できます。

(5) ソースをチェックアウトしてビルドできるようにする。

ビルド対象のソースをSubversionのリポジトリからチェックアウトします。
$ svn checkout http://xxx.xxx.xxx.xxx/src_server/trunk/src build_home--non-interactive
$ cd build_home

ビルド用のmaven設定ファイル(project.xml, maven.xml, project.properties)は、リポジトリに登録しておくと便利です。そうすることによって、一度、チェックアウトすれば、次回からは、 maven.xmlのpreGoalなどで、"scm:update"(svn updateに相当)するようにしておけば、mavenコマンドでソースを更新してビルドすることが可能です。
$ cd build_home
$ maven

ビルドされない場合、maven設定ファイルに不備(環境に依存するIPアドレスの設定など)があるので、Apache Maven Project Homeを参照の上、適宜修正してください。


Maven メモ

jarファイルのバージョン番号について:
jarファイルのスナップショットjarを作る場合、バージョン番号が入らない。
project.xmlにて、
<id>projectid</id>
<currectVersion>1.0.0</currectVersion>
と設定していた場合、
$ maven jar:snapshot で作成した、jarファイルは、
projectid-200500221.061222.jarとなる。(TZ=JST-9しても、日付はUTCになってしまいJSTにならない!?)
スナップショットのjarにバージョン番号を入れるには、
<id>projectid-1.0.0</id>のように、あらかじめバージョン番号を指定しておくしかないようだ。
しかし、この状態で
$ maven jar:jarとすると
projectid-1.0.0-1.0.0.jarになってしまうので、リリース用のjarを作成するときは注意すること。

maven multiproject goalのオプション例:
サブプロジェクトすべてにおいて、あるgoalだけを実行したい場合、以下のように- Dgoalオプションを指定する。
$ maven -Dgoal=jar:install multiproject:goal

このためには、project.propertiesにて、maven.multiproject.includes=**/project.xmlで適 切にサブプロジェクトのproject.xmlを参照できるようにしておく必要がある。

jarファイルのmanifestに"Build-Date"を入れる:
~/.maven/cache/maven-jar-plugin-1.6.1/plugin.jelly に以下の内容を追記する。
  <!-- ================================================================== -->
  <!-- Helper-goals                                                       -->
  <!-- ================================================================== -->
  <ant:tstamp>
     <ant:format property = "build.date"
          pattern = "EEE MMM d yyyy, HH:mm:ss"
          locale  = "en"/>
  </ant:tstamp>

<goal name="jar:jar" .../>の <ant:manifes>に以下の attributeを追記する。
<ant:attribute name="Build-Date" value="${build.date}"/>