2009年11月07日

Maven2のすすめ

maven-logo-2.jpg

認知度が結構あがってきてMaven2も
結構つかわれてきてるのではないかと思います。
でもまだまだ、Antやシェルを使ってコンパイルなどの作業を行っている人もいるでしょう。

そこでMaven2を使うメリット・特徴などを書いていきたいと思います。

Mavenとは



Mavenは一言では「構成管理ツール」といわれています。

構成管理とは、ビルド、バージョン管理、ドキュメンテーション、変更管理、リリース管理、テスト等々など、ソフトウェア開発をする上で必要な作業や管理項目です。

それらの項目をMavenというツールで一元管理しようというものです。

Webアプリケーションを作成していく流れは、大まかに設計→実装→テスト→リリースの流れになると思います。
そして、ドキュメントを作成することもあるでしょう。
(Javadocやカバレッジレポート、メトリクスなどなど)

その中で、Mavenが担っている主な役割は実装環境の整備、テストの実行、ドキュメント出力などがありますです。

開発環境の整備ついて言えば、ライブラリの依存関係を数行定義するだけで必要なライブラリをダウンロードし、クラスパスを通してくれます。


mvn eclipse:eclipse


とコマンドを打つだけでEclipseでの開発環境は完了です。
煩雑なJavaのクラスパス、依存関係に時間をとられることなくスピーディに環境を整えられます。
これは大人数での開発の場合にも威力を発揮し開発環境の整備、共通化の管理、構築コストを抑えてくれるでしょう。

Mavenが登場する前までは、Javaで開発するとなると依存するライブラリを取得するのもクラスパスを通すのも人が手を掛けてあげなければできませんでした。
Antなどを使って楽はできたのですが、都度都度build.xmlを書き換えなければいけません。人によっても書き方はばらばら。
また、ライブラリのバージョンに関してもそれぞれ依存関係があり、どのライブラリをどれが使っているのかわからない状態でした。
大規模な開発になればなるほど、複数のEclipseプロジェクトが関わるほどライブラリ間の依存関係(バージョン)についての問題が複雑化していきます。
(commons-langなどのバージョンの違いで問題が起きたことないですか?)

それらの煩雑な設定項目を人手を介さないで自動・共通化します。
人手を介さないで自動化することによって、ヒューマンエラーを減らすこともできます。あるライブラリの1.0のバージョンを使って実装したけれども、
別のひとは1.1を使って実装して動かないなどの、問題もおきにくくなります。

たびたび起こる、開発環境が壊れた場合でもMavenのコマンドで修復できることが多いです。


ドキュメントを作成するにも、それぞれの設定、定義などをしなければ出力できない状況でした。(Javadocを出すのも一苦労)

デプロイするためのwarを作るのも一苦労。。。
(特定のプロジェクトに依存したシェルスクリプトを毎回書きたいですか?)

そこを、Mavenという共通のプラットフォームでプラグイン化をしてあるため、pom.xmlに数行書く程度で出力することが可能です。

エンジニアはわずらわしい設定や問題の対処に時間をとられることが減り、目的の作業に集中することができるようになったわけです。

また、共通のプラットフォームとしてMavenを使うことにより知識の共有化ができ、学習コストも減りました。

今、現在Mavenのプラグインは大変な数になっています。
それも、数行書く程度で簡単に使用できるのも魅力です。


Mavenの仕組み



Mavenの特筆すべき機能として、依存関係の自動設定とプラガブルな仕組みがあります。

通常、JavaのWebアプリケーションは複数のライブラリを使って作成されます。
使用するにはさまざまなライブラリをクラスパスに通さないと、コンパイルできません。

Mavenがない場合、libディレクトリを作ったりして、その中にjarファイルをどんどん突っ込んでいきます。
規模が小さいうちはいいのですが、Jarファイルが20〜30とかに増えてくると、何がどう使われてるかわからず、管理することができなくなります。
ライブラリにセキュリティホールは重大なバグが見つかった場合にすばやく対処できなくなります。

その点、Mavenは厳密にライブラリのバージョン管理をしているので、定義ファイルのバージョンを書き換るだけですみます。
複数のプロジェクトを一元管理し、ライブラリのバージョンを統一します。

依存するライブラリもインターネット越しに自動で取得しローカルにJarをコピーするので取得するコストも最初の一回ですみます。
また、jarファイルをSubversion等のバージョン管理に含める必要もありません。

また、プラグイン形式で機能を追加することが可能です。

現在、Mavenで使えるプラグインはもはや数え切れなくなってきていて、
主要な、最低限必要そうなプラグインはMavenの本家でメンテナンスされています。
主なPluginの一覧:
http://maven.apache.org/plugins/index.html
http://code.google.com/hosting/search?q=maven+plugin+label%3Amaven&projectsearch=Search+Projects
http://mojo.codehaus.org/plugins.html

そのほかにも、codehaus.orgや、SourceForgeにもあったり、GoogleCode上でも
自作のプラグインが多数作成されています。

これらをpom.xmlに書くだけで使用することが可能です。

APサーバにデプロイを行ったり、変更点のレポートを出したり、TwitterにPostしたり?することも可能です。

これらは、lifecycleという考えを元にして、それぞれのフェーズでプラグインが実行されるように定義します。
例えばビルド時に実行、テストを行うときに実行など。


mvn package


など、よく使いますが、packageというライフサイクルを実行せよという意味です。

単体のプラグインだけの実行の場合は":"が付きます。


mvn clean:clean


など、mvn clean との違いは、ライフサイクルの実行か、cleanプラグインのcleanターゲットを実行するかの違いになります。

まとめ



Mavenを使ってさくさく開発しましょう!
posted by tfunato at 23:49 | コメント[0] | トラックバック[0] | Maven はてなブックマーク - Maven2のすすめこのエントリーを含むはてなブックマーク
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※承認されるまで反映されません!
この記事へのTrackBack URL
http://blog.seesaa.jp/tb/132292669