Ivyは、プロジェクトの依存性を管理 (記録、追跡、解決、および報告) するツールであり、Apache Antと密接に統合されている。これの2.0ベータバージョンがリリースされた。これは、Apacheプロジェクトとして初のリリースであり、Maven 2リポジトリとの強力な互換性が導入され、並行性サポートも強化された。さらに、いくつかの大きな変更点もある。リリースノート(source)では、Ivyの特徴について次のように記述されている。
- 柔軟性および構成可能性 - プロセスにとらわれず、手法や構造に縛られることがない。
- Antとの密接な統合 - 依存性の解決から依存性の報告や公開まで、さまざまなAntタスクを提供する。同時に、スタンドアローンツールとしても利用できる。
このリリースには、多数のバグ修正と、バージョン2.0向けチュートリアルの更新に加えて、次のような大きな変更点が含まれる。
- 設定に置き換えられた構成 - 混乱を防ぐため、Ivyをカスタマイズするために使用される設定は、モジュール構成のために使用される構成から分離された。
- 設定の読み込みの見直し - 廃止予定である構成タスクは、1つのAntビルドスクリプトでいくつかの設定の使用を可能にする設定データ型に置き換えられた。
- ivyrepはデフォルトのパブリックリゾルバではなくなった - これは、ibiblio Maven 2リポジトリに置き換えられた。
- 相対パスの解決 - 構成ファイルをインクルードするために相対パスが使用されている場合は、依存性の解決に影響を及ぼす可能性がある。これは、2.0でのパス解決が、現在のディレクトリに対する相対ではなく、構成ファイルがインクルードされるIvyファイルに対する相対として行われるためである。
Ivy 2.0は、カスタムプラグインが使用されていない限り、以前のリリースとの互換性を維持する。以前のバージョンはJayasoftプロジェクトとしてリリースされていたので、新しい2.0バージョンでは、パッケージ名がfr.jayasoft.Ivyからorg.apache.ivyに変更されている。
Ivyは、Maven 2リポジトリとの統合を強化したが、プロジェクトでは、2つの製品には大きな違いがあることや、Maven 2に存在する依存性管理機能に対してIvyがいかに実用的な代替方法を提供しているか(source)という点については非常に明確にされてきた。以下に、重要な点をいくつか挙げる。
Maven 2とIvyは並べて比較されることが多いが、実際には同じ種類のツールではない。Ivyは依存性管理機能のみを提供するものであるが、Maven 2は、ソフトウェアプロジェクトを管理する包括的なツールであり、依存性以外にもビルド、報告、および文書化などを主要な情報から管理することができる。Maven 2と比較するのであれば、Ant + Ivy 2.0という構成で考える方が適切だ。
競合管理 - 変化する依存性を制御する場合に、競合に対処する機能 - は、2つのツールで異なる。Ivyでは、競合マネージャおよびルールをモジュールでカスタマイズすることが可能である。一方、Maven 2の競合管理は直近の定義に基づく (つまり、foo 1.0に依存するモジュールから、foo 1.1を使用できるという依存性が導かれることはない)。
Maven 2における依存性の構成は、スコープと呼ばれる概念によって制御される。Maven 2の依存性は、テスト時スコープまたはビルド時スコープの一部として定義されなければならない。Ivyには、それぞれの構成 (必要なビルド成果物の宣言) を他のモジュールの依存関係に関連付けることのできる、複数構成マッピングを作成する機能があり、カスタマイズとして選択できるオプションの幅が広くなっている。
Maven 2の資料は、依存性管理に関係するものに限られるが、Ivyの資料は、より包括的で、比較FAQという形でも存在しており、多数のサンプルおよびチュートリアルが含まれる。パブリックリポジトリを使用できず、Antベースのビルドシステムに多大な投資をしてきた企業にとっては、Ivyがエンタープライズリポジトリの作成をサポートすることや、Antと密接に統合できるということも、Maven 2の代わりに使用できる依存性管理ツールとしてIvyを考える要因となる。