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コマンドでソースを更新してビルドすることが可能です。
ビルドされない場合、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}"/>
|