BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Maven 3.0リリース

Maven 3.0リリース

ブックマーク

原文(投稿日:2010/10/08)へのリンク

Sonatypeは本日、Maven 3のリリースを発表した(リリースノート)。このリリースは2005年のMaven 2のリリース以来の最大の変更になる。Maven 1からMaven 2へのリリースでは、POMを採用したことでMavenコミュニティに無視できない影響があったが(MOJOの作成を支援するスクリプト言語Jellyの出力には影響はなかった)、この変更とは違い、Maven 3のリリースでは後方互換性をなるべく維持するために、オープンソースのツールでの自動テストが十分に行われた。この結果、Maven 3はMaven 2を単純に置き換えるものになり、性能の向上以外にはほとんど目につく違いはなくなった。既知の問題は互換性に関するページで一覧されている。

この新バージョンであるMaven 3は、前バージョンで使われていたPlexusコンテナではなく、Google Guiceを使って構築されている。Google Guiceは軽量な依存性注入のフレームワークだ。このリファクタリングによって、将来他のコンテナを使うことができるようになる。例えば、Picoのようなコンテナだ。抽象レイヤを提供するのはSisuだ。SisuはSpringと互換性を持つようになる予定だ。

Mavenのレポーティングの面も変わった。専用のレポートティングセクションは、プレレポートの構成オプション(プラグインに似ている)として設定できる。既存のPOMについては自動変換機能によって再定義できる。しかし、Maven 3が広く使われるようになるにつれ、単独のレポーティングタグは使われなくなるだろう。加えて、レポート処理(そしてサイト生成)はMaven 3向けに改修しなけらばならなかった。また、前のベータ版ではサイト生成で発行される内容には制限があった。詳細はリリースノートを確認されたい。

Mavenシェル

Maven 3はMavenシェルという概念を導入する。これはMavenビルドとビルドサーバの一部分であるスタンドアロンのJavaプロセスだ。Mavenシェルによって、プロジェクトに必要なすべてのPOMをロードして変換しメモリ上に保持することで、以降のビルドを素早く処理できる。将来的にはこれを使って、ビルドサーバ上で同じコードを繰り返しビルドするのが高速に行えるようになるだろう。Mavenシェルのソースコードを見たければ、GitHubで見れる。また、FAQも利用できる。Mavenシェルは古いmaven-cli-pluginを置き換えるものになり、Hudson、Nexus、JIRA、Confluenceに込み込まれる予定だ。

TychoとM2Eclipse

ランタイムの改善と同様に、Maven 3ではMaven 2では不可能だった拡張ができる。Tychoはビルドのためのプラグインであり、EclipseのプラグインやEclipseのフィーチャ、Eclipse(P2)の更新サイト、そしてEclipseのRCPアプリケーションのビルドができる。それだけでなく、標準のMavenリポジトリの形式では扱えないライブラリのためのP2の更新サイトを扱うこともできる。いくつかのEclipseプロジェクトは今、旧式のEclipseのPDEやAntによるビルドではなく、Tychoを使っている。利用者が言うには“おそらく、MavenとTychoを使ってEclipseプロジェクトをビルドするに一番大変なことは、これがとても簡単だということを頭に解らせることです”。過去にEclipseプロジェクトをビルドしたことがある人は誰でも、ビルド結果が最初に動き始めるまでの作業がとても脆く、最終的に動き出すまでは“さわるな!”という態度が必要であることを知っている。現在、TychoはSonatypeにホストされているが、将来的には、Eclipse.orgのTychoプロジェクトへ移行される予定だ。

M2EclipseはEclipse内でMavenのビルド処理を管理するプラグインだ。このプラグインもGuiceとAetherを利用したMaven 3を利用するためにアップデートされた。M2EclipseはMavenを利用したプロジェクトのビルドと管理をシンプルにする方法を提供する。過去にMavenを利用したことがある場合は、M2_HOMEが参照するMavenのインスタンスとEclipseが使うMavenのインスタンスの違いだ。というのは、M2EclipseはM2Eclipse自体のMavenのコピーをインストールするからだ。現在、M2EclipseはSonatypeにホストされている。しかし、将来的にはEclipse.orgのM2Eに移行される予定だ。

将来

将来のMaven 3にはさまざまな可能性がある。POM形式は内部のデータ構造と分離しているので、他の形式(非XML)でも利用できる可能性を秘めている。Maven 3と同時にリリースされはしないが、Polyglot Mavenによる実験は、これが未来の開発の主流になること示している。

関心事が分離されていることの利点は他にもある。それは、POMファイルを複数に分割できることだ。こうすることで、“POMミクスイン”ができる。これは、Maven 3ではすぐに利用できないが、部分的にはすでに開発されている。POMミクスインを使うことでプラグインやレポートのサブセット定義できる。これはPOMのparent要素に似ているが、それ自体で複数のプロジェクト(または共通の祖先を持たないプロジェクト)に適用できる単体のエンティティだ。プロジェクト間の統一性をある程度確保したい企業やオープンソース組織はこのミクスインを利用することで、階層的にPOMを定義することなく標準化されたビルドを.構成できるだろう。

そして、3.0のリリースの後、Maven 3.xのツリーはOSGiのランタイムへと移行していく予定になっている。これは、Peaberryを利用して依存性注入のフックと繋げることで実現される予定だ。これについての最大の問題のひとつはOSGiのバージョニングの枠組み(Semantic Versioningのサイトで説明されている)に移行することだ。OSGiランタイムへの移行自体は困難な作業にはならないだろう。しかし、OSGiとMavenのバージョンの扱い方の小さな違いは多くの問題(制限のないバージョンの場合、OSGiの範囲では'bottom'として扱うが、Mavenの範囲では'top'として扱われる)を含んでいるだろう。またSNAPSHOTのようなシンボリック参照にも問題がある。LATESTやRELEASEのような他のシンボリック参照も利用できない。

Maven 3のリリースを成功させるために、Sonatypeやその他ではたくさんの大変な仕事が行われた。その成果はmaven.apache.orgからダウンロードできる。

この記事に星をつける

おすすめ度
スタイル

BT