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
コメント 0