// maven2 をつかって 30 分でつくる プロジェクトサイト
// 2006-06-06 加藤洋一 新規作成
// 2006-06-18 加藤洋一 更新
// 2006-09-14 加藤洋一 誤字脱字の訂正
//---------------------------------------------
目的:
maven2 を利用したプロジェクトサイト構築を紹介します。
eclipse + ant + cvs + junit + ...
といった従来方法から
eclipse + maven2 + subversion + testNG + cobertura + continuum + ...
の方法への乗換えを勧めるものです。
<< 目次 >>
======================================
0. maven とは
0.1 maven って何
0.2 なぜ maven を勧めるのか
0.3 この文書の対象者と説明する内容
1. インストール
1.1 ダウンロード
1.2 インストール
1.3 動作のチェック
2. 最初のプロジェクト
2.1 ひな形の生成
コラム: setting.xml
2.2 compile, test, packaging, プロジェクトサイト生成
コラム: ひな形の種類
eclipse 設定
eclipse から maven を実行
ant 設定
3. TestNG の利用
3.1 依存プラグインの追加
3.2 テストケースの作成
4. プロジェクトレポートの追加
4.1 javadoc
コラム: その他のレポート項目
mojo
4.2 cobertura
5. subversion の利用
6. continuum の利用
7. サイト文書の追加
8. 複数プロジェクトの管理
======================================
0. maven とは
==============
0.1 maven って何
----------------
http://itpro.nikkeibp.co.jp/article/COLUMN/20051110/224373/
>> Jakarta/Apacheウォッチ】第21回 強力ビルド・ツール Apache Maven2ついにリリース
>> Maven は,Antやmakeなどと同様にプログラムのコンパイルやテスト,パッケージングなどを行うビルド・ツールだ。
>> しかし,Mavenが提供する機能はそれだけにはとどまらず,開発プロジェクトに関する様々な情報を管理することが可能だ。
>> プロジェクト管理ツールとしての機能を備えていると言える(注)。
>> 注)ここで言うプロジェクト管理とは,システム開発プロジェクトにおけるソフトウエア・リソースを対象とした管理
>> のことであり,Mavenはスケジュールや予算などのリソース管理ツールではない。
http://www.objectclub.jp/technicaldoc/tools/maven/maven01
>> Maven連載: 第1回 Mavenって何?
(これは maven1 を対象にした記事)
0.2 なぜ maven を勧めるのか
------------------------
* ant での build.xml は膨大になりがちで、その保守が大変になりがちだった。
--> maven では、標準的なタスクがあらかじめ用意されており、pom.xml(ant の build.xmlに相当する)
に特になにも記載しなくても、実行ができる。
* jar ファイルの依存関係(バージョンも含め) の管理が統一されており、
開発メンバーの各自の jar ライブラリーの統一/保守が楽になった。
* 各種のレポートを含むプロジェクトサイトの生成が楽にできる。
(ただし日本語の扱いにはまだ難がある。)
* jakarta 系プロジェクトを始めとし、数多く 採用されている。
http://maven.apache.org/powered-by-m2.html
>> maven2 利用サイトの例
0.3 この文書の対象者と説明する内容
-------------------------------
対象:
- java でのソフト開発者で、ある程度のサイズを超えたものを効率よく管理したいと考えている方。
- リリースに際しての手作業を減らしたいと考えている方。
説明内容:
- maven2 の入門
- TestNG をつかった単体テスト
- cobertura をつかったカバレーッジ測定
- プロジェクトサイトの構築
- continuum をつかった継続ビルド
ここで説明しない事:
- ant からの移行方法
1. インストール
==============
maven2 にはとくにインストーラはありません。(maven は pure java なプログラムです。)
downlaod したものを展開して、PATH を通すだけです。
- http://maven.apache.org/download.html#requirements
>> System Requirements
>> JDK 1.4 or above
>> Memory No minimum requirement
>> Disk No minimum requirement. Approximately 100MB will be used for your local repository,
>> however this will vary depending on usage and can be removed and redownloaded at any time.
>> Operating System No minimum requirement.
>> On Windows, Windows NT and above or Cygwin is required for the startup scripts.
>> Tested on Windows XP, Fedora Core and Mac OS X.
1.1 ダウンロード
---------------
http://maven.apache.org/ の download ページから maven-2.0.4-bin.tar.gz を download します。
(利用している OS/環境の従って bz2, tar.gz, zip など適宜 選びます。)
1.2 インストール
---------------
ダウンロードしたものを、適宜 展開します。
例: ~/Desktop/maven-2.0.4)
PATH を設定します。
例:(macOSX の場合)
~/.profile に次の行を追加
MAVEN_HOME=/Users/kato/Desktop/maven-2.0.4
PATH=$PATH:$MAVEN_HOME/bin
(windows の場合)
環境変数の追加:
MAVEN_HOME=c:\\tools\maven-2.0.4
環境変数の編集
PATH に %MAVEN_HOME%\bin を追加する。
1.3 動作のチェック
-----------------
-------------------------------------------
1 |$ mvn -v
2 |Maven version: 2.0.4
3 |$
-------------------------------------------
maven はコマンドラインのツールです。
1 行目: mvn が、 maven2 のコマンド名です。(古い version では、 maven や m2 なんて名前の時もありました。)
2 行目: コマンドからの出力として、バージョンが正しく表示されることを確認します。
2. 最初のプロジェクト
====================
サンプルのプロジェクトサイトを作るだけなら数分でできてしまいます。
2.1 ひな形の生成
----------------
[コラム] setting.xml
-------------------
firewall 環境から maven を利用する場合、proxy の設定が必要です。
~/.m2/setting.xml ファイルを次の内容で作成します。
(windows の場合は "C:\Documents and Settings\ユーザー名\.m2\setting.xml")
----------------------------------
|
|
| true
| http
| proxyhost
| proxyport
| *.foo.co.jp
|
|
-------------------------------
(上記の記述内容は、環境に合わせ適切なものを指定する必要があります。)
http://www.limy.org/program/java/maven/setting.html に日本語で
setting.xml に記載できる内容の説明
があります。
本家サイトでは、 http://maven.apache.org/guides/mini/guide-proxies.html
でこの設定について述べられています。
2.2 compile, test, packaging, プロジェクトサイト生成
-------------------------------------------------------------
1 |$ mkdir mvn
2 |$ cd mvn
3 |$ mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
|[INFO] Scanning for projects...
|[INFO] Searching repository for plugin with prefix: 'archetype'.
|[INFO] org.apache.maven.plugins: checking for updates from central
|[INFO] org.codehaus.mojo: checking for updates from central
|[INFO] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central
A |Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/1.0-alpha
|-4/maven-archetype-plugin-1.0-alpha-4.pom
|1K downloaded
| ... 省略 ...
B |[INFO] Archetype created in dir: /Users/kato/work/src/mvn/project/step00/my-app
|[INFO] ------------------------------------------------------------------------
C |[INFO] BUILD SUCCESSFUL
|[INFO] ------------------------------------------------------------------------
|[INFO] Total time: 1 minute 45 seconds
|[INFO] Finished at: Sat Jun 17 09:36:45 JST 2006
|[INFO] Final Memory: 4M/9M
|[INFO] ------------------------------------------------------------------------
-------------------------------------------------------------
1 行目: これからの作業用のフォルダーを作成します。
2 行目: 移動します。
3 行目: maven2 でひな形プロジェクトを作成します。
A 行目:必要となる jar などが、自動的にネットから download されます。
firewall 環境下ではエラーがでます。firewall 下での設定は
[コラム] setting.xml
を参照してください。
~/.m3/repository/ や "C:\Documents and Settings\ユーザー名\.m2\repository
に download されます。
2度目からは、download されたものが利用されるので、mvn 実行の度に download が発生する
わけではありません。
B 行目: my-app というフォルダ下にひな形が作成されたことが表示されています。
C 行目: 処理が正常終了したことが表示されています。
つぎのようなファイルが生成されています。
これはプロジェクトとして最低限のものがそろっています。
compile/単体テスト/サイト生成ができます。
-------------------------------------------------------------
|$ tree
|.
|`-- my-app
A | |-- pom.xml
B | `-- src
C | |-- main
| | `-- java
| | `-- com
| | `-- mycompany
| | `-- app
| | `-- App.java
D | `-- test
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- AppTest.java
-------------------------------------------------------------
A: pom.xml プロジェクトの設定情報です。
B: src/ ソースファイルです。
C: 本体のコードです。
ここでは、 App.java だけが生成されています。
D: junit テストのコードです。
ここでは、 AppTest.java として, junit テストケースが生成されています。
コンパイルを行います。
-------------------------------------------------------------
1 |$ mvn compile
| ... 省略 ...
|[INFO] [compiler:compile]
A |Compiling 1 source file to /Users/kato/work/src/mvn/project/step00/my-app/target/classes
|[INFO] ------------------------------------------------------------------------
|[INFO] BUILD SUCCESSFUL
|[INFO] ------------------------------------------------------------------------
|[INFO] Total time: 16 seconds
|[INFO] Finished at: Sat Jun 17 09:54:21 JST 2006
|[INFO] Final Memory: 3M/9M
-------------------------------------------------------------
A 行目: class ファイルを生成したことが表示されています。
単体テストを行います。
-------------------------------------------------------------
1 |$ mvn test
| ... 省略 ...
A |[INFO] Surefire report directory: /Users/kato/work/src/mvn/project/step00/my-app/target/surefire-reports
|
|-------------------------------------------------------
| T E S T S
|-------------------------------------------------------
|Running com.mycompany.app.AppTest
|Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.178 sec
|
|Results :
B |Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
|
|[INFO] ------------------------------------------------------------------------
|[INFO] BUILD SUCCESSFUL
|[INFO] ------------------------------------------------------------------------
|[INFO] Total time: 38 seconds
|[INFO] Finished at: Sat Jun 17 09:56:49 JST 2006
|[INFO] Final Memory: 3M/8M
|[INFO] ------------------------------------------------------------------------
-------------------------------------------------------------
A 行目: テスト結果のレポートが生成される場所が表示されています。
実際のこのレポートを直接みることは通常 ありません。
後述するプロジェクトサイト中のレポートページを通じて参照するのがよいです。
B 行目: すべてのテスト(ここでは1件だけですが)が OK だったことが表示されています。
jar の作成を行います。
-------------------------------------------------------------
1 |$ mvn jar:jar
| ... 省略 ...
A | [INFO] Building jar: /Users/kato/work/src/mvn/project/step00/my-app/target/my-app-1.0-SNAPSHOT.jar
| [INFO] ------------------------------------------------------------------------
| [INFO] BUILD SUCCESSFUL
| [INFO] ------------------------------------------------------------------------
| [INFO] Total time: 26 seconds
| [INFO] Finished at: Sat Jun 17 10:02:27 JST 2006
| [INFO] Final Memory: 2M/4M
| [INFO] ------------------------------------------------------------------------
-------------------------------------------------------------
A 行目: jar の生成場所が表示されます。
プロジェクトのサイトを生成します。
-------------------------------------------------------------
|$ mvn site
| ... 省略 ...
|[INFO] Generate "Dependencies" report.
|[INFO] Generate "Issue Tracking" report.
|[INFO] Generate "Project License" report.
|[INFO] Generate "Mailing Lists" report.
|[INFO] Generate "About" report.
|[INFO] Generate "Project Summary" report.
|[INFO] Generate "Source Repository" report.
|[INFO] Generate "Project Team" report.
|[INFO] ------------------------------------------------------------------------
|[INFO] BUILD SUCCESSFUL
|[INFO] ------------------------------------------------------------------------
|[INFO] Total time: 12 minutes 11 seconds
|[INFO] Finished at: Sat Jun 17 10:16:02 JST 2006
|[INFO] Final Memory: 10M/24M
|[INFO] ------------------------------------------------------------------------
-------------------------------------------------------------
A 行目: 各種のレポートが生成されることが表示されます。
target/site/index.html をブラウザで閲覧してみてください。
maven2 の本家サイトには及びませんが、類似のサイトが生成できていることがわかります。
このゴールでは、 comile, test も実行されます。これらの処理でエラーがおこった時点で
処理は失敗になります。 (テストが通らないと、サイトページは生成できないと言う事)
maven での各種の生成物は target/ 以下に作成されます。
生成物をクリアします。
-------------------------------------------------------------
|$ mvn clean
| ... 省略 ...
|[INFO] [clean:clean]
|[INFO] Deleting directory /Users/kato/work/src/mvn/project/step00/my-app/target
|[INFO] Deleting directory /Users/kato/work/src/mvn/project/step00/my-app/target/classes
|[INFO] Deleting directory /Users/kato/work/src/mvn/project/step00/my-app/target/test-classes
|[INFO] ------------------------------------------------------------------------
|[INFO] BUILD SUCCESSFUL
|[INFO] ------------------------------------------------------------------------
|[INFO] Total time: 2 seconds
|[INFO] Finished at: Sat Jun 17 10:32:15 JST 2006
|[INFO] Final Memory: 2M/3M
|[INFO] ------------------------------------------------------------------------
-------------------------------------------------------------
ここまでに紹介した maven のゴールを列挙します。
mvn compile
mvn test
mvn jar:jar
mvn site
mvn clean
ゴールは "foo:bar" の書式が正式のものですが、":bar" を省略できるものもあります。
例: clean:clean は clean で指定できる。
site:site は site で指定できる。
どんなゴール指定があるかは、
http://maven.apache.org/plugins/index.html
を参照してください。
上では紹介しませんでしたが、つぎのものも試してみてください。
mvn package
compile/test/jar 生成を行う。
mvn source:jar
本体ソースコードを archive する。
mvn source:test-jar
テストソースコードを archive する。
[コラム] ひな形の種類
http://wiki.fdiary.net/maven2/?CookBook#l3 より引用
>> maven-archetype-j2ee
>> earをターゲットとする開発
>> maven-archetype-mojo
>> Maven2プラグイン開発用
>> maven-archetype-portlet
>> Jetspeedを利用したポータルアプリケーションの開発用
>> maven-archetype-profiles
>> 品質管理、プロファイリング用(?)
>> maven-archetype-quickstart
>> jarをターゲットとする開発用
>> maven-archetype-site
>> Webサイトの開発用
>> maven-archetype-webapp
>> warをターゲットとする開発
[コラム] eclipse 設定
- mvn eclipse:eclispe とすると、pom.xml から eclipse 用の .project, .classpath ファイルを生成できます。
これらのファイルがあれば、 eclipse の priject として、import することができます。
.classpath ファイル中では、 M2_REPO/... として .me/repository 以下のファイルを参照するようになっています。
eclipse の jara の classpath variable で M2_REPO を登録する必要があります。
生成物は、 taget/ 下に作成されるように設定されています。
[コラム] eclipse から maven を実行
コマンドラインでなく、eclipse から maven の起動ができる eclipse プラグインがあります。
http://m2eclipse.codehaus.org/
See: http://wiki.fdiary.net/maven2/?CookBook#l37
>> EclipseでMaven2を操作するためのEclipseプラグインをインストールする。
[コラム] ant 設定
- mvn ant:ant とすると、pom.xml から build.xml を生成できます。
生成された build.xml には次のターゲットが含まれています。
-------------------------------------------------------------
|$ ant -projecthelp
|Buildfile: build.xml
|
|Main targets:
|
| clean Clean the output directory
| compile Compile the code
| compile-tests Compile the test code
| get-deps Download all dependencies
| jar Clean the JAR
| test Run the test cases
| Default target: jar
-------------------------------------------------------------
get-deps は 依存 jar を nettowrk から downlaod するターゲットです。
生成物は、 taget/ 下に作成されるように設定されています。
3. TestNG の利用
================
TestNG によるテストケースを作成します。
3.1 依存プラグインの追加
----------------------
testNG は jdk1.5 で動作するので、 comppile 時も jdk1.5 の設定で動作するようにします。
pon.xml を次のように編集します。
-------------------------------------------------------------
|
| ...
|
|
|
| maven-compiler-plugin
|
| 1.5
| 1.5
|
|
|
| ...
|
-------------------------------------------------------------
TestNG のjar を利用することを pom.xml に記述します。
-------------------------------------------------------------
|
| ...
|
| org.testng
| testng
| 4.7
| test
| jdk15
|
|
| ...
|
-------------------------------------------------------------
3.2 テストケースの作成
--------------------
自動生成された
my-app/src/test/java/com/mycompany/app/AppTest.java
は junit 用のテストケースです。
AppTest.java を以下の様に編集します。
-------------------------------------------------------------
|package com.mycompany.app;
|
|import org.testng.annotations.Test;
|
|/**
| * Unit test for simple App.
| */
|public class AppTest
|{
| @Test
| public void testApp()
| {
| assert( true );
| }
|}
-------------------------------------------------------------
junit では、
- テストクラスは extends TestCase すること
- テストのメソッドは testFoo() とする
の決まりがありました。
TestNG では、
- extends する必要はありません。pojo として作成できます。
- テストメソッド名の制限はありません。
@Test のアノテーションで、テストメソッドであることを指定する
だけです。
参考:http://www-06.ibm.com/jp/developerworks/java/050121/j_j-testng.html
>> TestNGでJavaユニット・テストを楽々行う: JUnit に勝るTestNGフレームワークを試す
maven2 を使えば、TestNG を使えるようにするための設定は不要です。
pom.xml に TestNG の plugin の利用を記載するだけで、テスト実行が行えます。
$ mvn test
で、テストケースが実施されます。
4. プロジェクトレポートの追加
--------------------------
4.1 javadoc
-------------
ここでは、javadoc をサイトページに追加します。
pom.xml を次の様に編集します。
-------------------------------------------------------------
|
| ...
|
|
|
| org.apache.maven.plugins
| maven-javadoc-plugin
|
| 256m
| 512m
| Shift_JIS
A | true
|
|
|
|
| ...
|
-------------------------------------------------------------
オプションの指定などは以下を参照してください。
http://maven.apache.org/plugins/maven-javadoc-plugin/configuration.html
ここでは linksource を true に設定しているので、javadoc からソースコードにもジャンプ
できるようにしています。
$ mvn site を行うと、javadoc へのリンクが サイトページの [Project Report] に追加されます。
[コラム] その他のレポート項目
jxr: ソースのクロスリファレンス
checkstyle: checkstyle の結果レポート
PMD: PMD の結果レポート
jdepend: jdepend の結果レポート
http://www.in-vitro.jp/blog/index.cgi/Maven/20060330_01.htm
>> Maven2 の Report 用プラグイン一覧
[コラム] mojo
maven 本家以外からも maven2 用のプラグインが多く提供されています。
特に mojo には有用なものが多くあります。
http://mojo.codehaus.org/
ここで提供されているものを利用するには、setting.xml の設定が必要です。
See http://mojo.codehaus.org/using-sandbox-plugins.html
4.2 cobertura
--------------
テストカバレーッジツールです。
単体テストがどの程度コードの実行をカバーしているかをチェックすることでテスト漏れを見つけることができます。
http://www-06.ibm.com/jp/developerworks/java/050527/j_j-cobertura.html
>> Coberturaでテスト対象範囲を調べる: バグが潜む未テストのコードを見つける
ここでは、cobertura のレポートをサイトページに追加します。
pom.xml を次の様に編集します。
-------------------------------------------------------------
|
| ...
|
| ...
|
| org.codehaus.mojo
| cobertura-maven-plugin
|
|
|
| clean
|
|
|
|
| ...
|
|
| ...
|
|
| ...
|
| org.codehaus.mojo
| cobertura-maven-plugin
|
| ...
|
| ...
|
-------------------------------------------------------------
オプションの指定などは以下を参照してください。
http://mojo.codehaus.org/cobertura-maven-plugin/usage.html
$ mvn site で coberage 測定とレポート生成が行われます。
サイトページの [Project Reports] - [Cobertura Test Coverage] でレポートにアクセスできます。
http://mojo.codehaus.org/cobertura-maven-plugin/sample-jxr/index.html
>> レポート例
カバレーッジ統計は my-app/cobertura.ser に累積的に格納されていきます。
ソースコードを編集すると、行番号がずれる為、cobertura.ser の内容は無効なものとなってしまいます。
cobertura.ser を削除するには
$ mvn cobertura:clean
を実行します。 ($ mvn clean では cobertura.ser 削除は実行されません)
5. subversion の利用
====================
http://subversion.bluegate.org/doc/index.html
>> Subversion によるバージョン管理
http://subversion.bluegate.org/doc/apa.html
>> CVSユーザのためのSubversion
http://www.limy.org/program/subversion.html
>> CVSと違うところ
subversion のレポジトリを立ち上げるのは、cvs レポジトリの立ち上げと比べても
難しいことは特にありません。
subversion のクライントも多く出回っています。
http://www.viewvc.org/
>> viewvc: ViewVC is a browser interface for CVS and Subversion version control repositories.
http://server.seasar.org/manual/install_subclipse.html
>> Subclipse: subversionアクセスのための eclipse プラグイン
pim.xml には SCM の設定箇所があります。
次のように編集します。
-------------------------------------------------------------
|
| ...
|
|
A | scm:svn:http://localhost/svn-reps/my-app/trunk/
B | scm:svn:http://localhost/svn-reps/my-app/trunk/
C | http://localhost/svn-reps/my-app/trunk/
|
| ...
-------------------------------------------------------------
ここでは、
svn:http://localhost/svn-reps/my-app/trunk/
で、この my-app の レポジトリのアクセスできることを記述しています。
編集後に、 mvn site で生成されたページでは [Project Information] - [Source Repository]
からの link が機能するようになったことを確認してください。
6. continuum の利用
===================
http://www.in-vitro.jp/blog/index.cgi/Maven/20051109_01.html
>> Continuum にチャレンジ
>> ...
>> Continuum は、Maven2、Maven、Ant などに対応した継続的インテグレーションツール。
>> 実際のところはシェルスクリプトをキックできるようになっているので、他のビルドツールを使用していても大丈夫。
>> ...
http://maven.apache.org/continuum/
>> Continuum 本家サイト
http://localhost:8080/continuum/ でアクセスします。
7. サイト文書の追加
==================
[[工事中]]
8. 複数プロジェクトの管理
=======================
[[工事中]]
その他の参考 URL
==============
http://www.jajakarta.org/wiki/workspace/index.php?Maven%CB%DD%CC%F5%A5%B5%A5%D6%A5%D7%A5%ED%A5%B8%A5%A7%A5%AF%A5%C8
>> maven 翻訳プロジェクト
//--- End of File---