Maven 1.x TIPS & References [BuildProcess]
maven 1.0.2 を再度利用してみようと考えています。今までの備忘録を整理しなおしてみました。
○TIPS
- ビルドした日時をつける
project.propertiesに以下行を追加
maven.xdoc.date=left
maven.xdoc.date.format = yyyy/MM/dd HH:mm z
- Pluginのダウンロードおよびインストール
以下のコマンドでプラグインをダウンロードすると、ローカルのリポジトリにプラグインが反映される。次回 maven コマンド実行時に更新されたバージョンのプラグインが利用可能
maven plugin:download -Dmaven.repo.remote=http://maven-plugins.sf.net -DartifactId=maven-findbugs-plugin -Dversion=0.8.2
- CVSのパスワードファイル .cvspass の生成の方法
maven -Dpassword=XXXXXXX changelog:create-cvspass
- FAQ
xdocs/faq.fml を記述して、(.xmlでないことに注意) project.xml に以下の行を追加することにより、site GOAL が実行されたときに、FAQページが生成される。
<report>maven-faq-plugin</report>
- 単一のコードのテスト
maven -Dtestcase=org.foo.bar.MyTest test:single
○References
・Maven
- Maven
http://maven.apache.org/ - Maven Frequently Asked Questions
http://wiki.astrogrid.org/bin/view/Astrogrid/MavenFAQ - codehaus.org の maven 関連のページ
http://wiki.codehaus.org/maven/FrontPage - Maven Mailing List
http://java2.5341.com/8.html - Maven Plugins
MavenのPluginの一覧です。
http://maven.apache.org/reference/plugins/plugins.html
http://docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix
・CruiseControl
- CruiseControlのホームページ
CruiseControlはMatin Fowler and Matthew Foemmel提唱のContinuous Integration に基づいた継続的なビルドプロセスを支援するためのフレームワークです。
http://cruisecontrol.sourceforge.net/ - CruiseControl
thoughworks の CruiseControl 関連のページです。不明な点はここで調べることが可能です。
http://confluence.public.thoughtworks.org/display/CC/Home
・ CheckStyle
- CheckStyle
Checkstyle は、プログラマがコーディング標準に従った Java コードを書くようにすることを支援する開発ツールです。
http://checkstyle.sourceforge.net/ - CheckStyle日本語訳
http://www003.upp.so-net.ne.jp/kaz-taka/checkstyle/3.5/index.html
・Jelly
- Jelly
http://jakarta.apache.org/commons/jelly/
Jellyは、Java・XMLベースのスクリプトエンジンです。maven の1.x スクリプトは jelly をベースに記述されています。2.x では変更されました - Jelly日本語訳
jakarta.jp による jelly の日本語訳のページです。
http://jakarta.jp/commons/jelly/
Maven 2 [BuildProcess]
Draft
はじめに
- Maven2 がリリースされ、はや半年が過ぎようとしています。Maven1.x の開発に比べると、Maven2 の開発に注力されているようですので、リリース後早速移行を試みましたが、いくつかの問題が立ちふさがりなかなか移行できずにいます。
まずは、いったん整理して、Maven 1.x で稼動する環境を再構築する方向に方向転換しようと思います。体裁は構わず記録だけは整理だけしておこうと思います。
Mavenとは、Maven1.x からの変更点に関して
- Maven はプロジェクトマネージメントシステムです。
プロジェクトのビルドプロセス、結果レポートやドキュメントの集約を支援します。
○Maven1.0からの変更点:
http://maven.apache.org/maven2/maven1.html
- 速く、小さい
maven のコアモジュールは ant, jelly, xerces 等を使用せず、小さく、依存関係は疎になりました。 - ライフサイクルの規定
maven1.0 で使用していたゴールの前後処理である prereqs, preGoals and postGoals は不要になりました。
ビルドは、洗練された定義されたフェイズに基づきます。具体的には、通常のゴールの名前(compile, test, install)は使用されないことも意味します。 - 複数プロジェクトをハンドリングするための組み込みの仕組みを提供
プロジェクトに対する同一のゴールを使用し、結果を集約させることができます。 - SNAPSHOTをハンドリングする方法の向上
今までは、SNAPSHOTはディフォルトでは日ごとに1回だけアップデートすることをチェックしていました。今後は、ビルドごと、特定のインターバルごと、そして、無効にすることが可能です。 - プロパティファイルは使用しません
全てのプラグインの設定は、POMの中で設定されます。 - maven.xmlは使用しません
プラグインはより簡単にビルドし統合できます。そして、ビルドするためのスクリプトを書く唯一の手段となります。 - Jellyは使用しません。
プラグインは、主に Java で記述しますが、他のスクリプト言語を提供もされています。このリリースでは、jelly に良く似た XMLのシンタックスをサポートするスクリプトフレームワークである Marmalade を サポートします。Marmalade は ant task の統合をおこない、jelly との互換レイヤをもちます。 - リポジトリレイアウトの向上
maven2.0は、既存のそして向上したリポジトリレイアウトをサポートします。分割された構造によりよりいっそうリポジトリを理解しやすくなるでしょう。
○MOJOってなに?
http://blog.goo.ne.jp/ikkoan/e/faee35340ce18875ead57930d40698e0
- Maven2.0 では Plugin は Java もしくはスクリプト言語(現状 Marmalade というスクリプト言語のみ利用可能です。)で記述されます。Maven の Plugin は、基本的にコマンドオブジェクトです。Maven Plugin を生成するためには、Mojo interface を実装する Java Class(Maven のPOJOのことを指す) を作成します。 このインターフェイスには、パラメータおよび戻り値をもたない1つの実行メソッド、そしていくつかのログ用メソッドを定義されます。
そして、Plugin に対して 追加の情報を提供する Plugin Descriptor を記述する必要があります。内容にはライフサイクル やパラメータが含まれます。この Descriptor で定義されたパラメータは、Maven により 実行時に Plugin 内のメンバ変数に Inject されます。Maven は、Plugin Descriptor の生成およびPluginをパッケージングするためのツールを提供することにより、このプロセスを簡略化します。あとは、あなた自身の Plugin を アノテートするだけです。残りはMavenがハンドリングしてくれます。
○透過的な依存性
- Maven2 では再帰的にプロジェクトの依存関係を解析します。
具体的には、プロジェクトで参照しているライブラリが、さらに依存しているライブラリを自動的に取り込むことが可能です。透過的な依存性は、ビルドプロセスを単純にすることに大変役に立ちます。
さらにいくつかの依存関係の解決にも取り組んでいます。1つはサイクリックな依存関係の解決です。もう1つはバージョンの競合の解決です。 詳細は Maven2 の WEBサイトでご覧になることができます。
maven2 では、4つの依存性のスコープを用意されています。
- compile:全てのクラスパスで有効となります。
- runtime:実行時およびテスト時のクラスパスで有効となります。
- test:テストケースのコンパイルおよび実行時のクラスパスで有効となります。
- provided:コンパイル時には必要だが、実行時にはコンテナから提供されるライブラリを意図しています。(例としては、servletapi が挙げられます。)
インストール・設定に関して
○Javaプロジェクトの雛形の作成
- maven2を使用するための最初のステップは、maven2が要求する初期設定、ディレクトリ構成を整える必要があります。以下のコマンドを入力することにより、テンプレートに従った初期設定およびディレクトリ構成を出力することが可能です。
m2 archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
※Webプロジェクトの場合:-DarchetypeArtifactId=maven-archetype-webappを末尾に付与することにより、Webプロジェクトのテンプレートを出力することが可能です。
http://tidus.ultimania.org/wiki/index.php?Maven2
○各プロジェクトで共通の設定
- ${user.home}/.m2/settings.xmlに記述する
maven2 では必要なプラグイン群をインターネットに接続し取得するため、プロクシの設定が事前に必要となります。プロクシの設定を本ファイルに記述することに関しては留意しておく必要があります。
settings.xml のリファレンスは以下をご覧ください。
http://maven.apache.org/maven2/maven-settings/settings.html
pom.xml のリファレンスは以下をご覧ください。
http://maven.apache.org/maven2/maven-model/maven.html
TIPS
○maven のコンパイル時に JDKのバージョン、javac のソース互換性(-source)、ターゲットの指定(-target)をおこなうには?
- -source, -target として JDK1.5 を想定した場合には、以下のようになります。
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
...
</build>
詳細に関しては以下のURLをご覧ください。maven2のFAQですので、一読されることをお勧めします。
http://maven.apache.org/maven2/general.html
TestNG maven plugin [BuildProcess]
Cedric さんのWeblog に「2.4のリリースには、TestNG maven pluginを含めることができなかったが、CVS リポジトリにも格納されたし、2.4.1には含めることができるでしょう。」とありました。
- Otaku, Cedric's weblog
http://beust.com/weblog/archives/000300.html
が、2.4.1にはまだ含まれていないようですね。ちなみに現時点では、TestNG maven plugin は以下からダウンロードできます。
- Getting Started with TestNG
http://www.vanwardtechnologies.com/startingwithtestng.php
References
- TestNGでJavaユニット・テストを楽々行う
http://www-6.ibm.com/jp/developerworks/java/050121/j_j-testng.html - TestNG: The next generation of unit testing
http://www.javaworld.com/javaworld/jw-04-2005/jw-0404-testng_p.html