まず第一に、IvyはMavenではありません;)
Maven2はソフトウェアプロジェクト管理および理解ツールですが、Ivyは依存関係管理ツールにすぎません。
Ivyは、構成と呼ばれる独自の概念に大きく依存しています。
Ivyでは、モジュール構成はモジュールを使用または表示する方法です。
たとえば、モジュールにテストとランタイムの構成を含めることができます。ただし、MySQLとOracleの構成を使用することもできます。または、HibernateとJDBC構成。
各構成で、次のことを宣言できます。
- どのアーティファクト(jar、war、...)が必要か。
- 他のモジュールへの依存関係、および必要な依存関係の構成を記述します。これは構成マッピングと呼ばれます。
したがって、conf属性は正確に次のことを行います。依存関係の構成マッピングを記述します。マップされた子要素
は
「シンボルの右側」であり、マップされた依存関係構成の名前を表します。ワイルドカードを使用して、このモジュールのすべての構成を指定できます。->
'*'
チャーリーハバードの「ツタの構成の最も簡単な説明」で詳細を参照してください
その重要な部分は、Ivyが依存関係をダウンロードして整理することです。
ivyモジュール(つまりivy.xml
ファイル)には、2つの主要な部分があります。
- どのような依存関係が必要ですか?
- それらをどのように整理しますか?
最初の部分は<dependencies>
要素の下に構成されます。2番目は要素
によって制御されます<configurations>
Ivyがこれらの依存関係をダウンロードするとき、これらの推移的な依存関係をプルするときに使用するスコープを知る必要があります(テスト、ランタイム、コンパイルなどのためにこれをプルしますか?)。何をプルするかがわかるように、構成をMavenスコープにマップする方法をIvyに指示する必要があります。
Maven2の側面には、スコープと呼ばれるものがあります。
依存関係をテストスコープまたはビルドタイムスコープの一部として宣言できます。
次に、このスコープに応じて、依存関係アーティファクト(maven2のモジュールごとに1つのアーティファクトのみ)と、スコープに応じた依存関係を取得します。スコープはmaven2で事前定義されており、変更することはできません。
つまり:
多くのライブラリにダウンロードされた不要な依存関係がたくさんあります。
たとえば、Hibernateは一連のJBoss JARをダウンロードし、DisplayTagはすべてのさまざまなWebフレームワークJARをダウンロードします。追加したのとほぼ同じ数の依存関係を除外していることに気づきました。
問題は、休止状態がいくつかのキャッシュ実装、いくつかの接続プール実装で使用できることです...そしてこれはスコープで管理できません。Ivy構成はこの種の問題に対する洗練されたソリューションを提供します。
たとえば、Ivyでは、hibernateに次のようなIvyファイルがあると仮定すると、次のような依存関係を宣言できます。
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/>
proxoolとoscacheの実装で休止状態にするには、次のようにします。
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->dbcp,swarmcache"/>
dbcpとswarmcacheで休止状態になります。
デフォルトmaster
設定を" proxool,oscache
"または""にマッピングすることにより、モジュール"hibernate"からdbcp,swarmcache
必要なものを正確に指定します。
これらの「proxool、...」引数は、ライブラリに関連付けられている各モジュールに定義されているIvy構成を一覧表示することで見つけることができます。例えば:
<ivy-module version="2.0">
<info organisation="ssn-src" module="pc"/>
<configurations defaultconfmapping="default->default">
<conf name="default" />
<conf name="provided" description="they are provided by the env." />
<conf name="compile" extends="default,provided" />
<conf name="war" extends="default"/>
</configurations>
<dependencies>
例:
modA
デフォルトとテストの2つの構成があるとしましょう。実際問題として、依存関係要素の属性を
除外したいのは非常に珍しいことです。forには依存関係がある可能性があります
。conf
ivy.xml
modA
<dependency org="theteam" name="modB" rev="1.0" conf="default->*" />
デフォルトとテストの両方からではなく、デフォルトから開始しています。
上記の例では、modAのデフォルトをmodBのconf1、conf2、およびconf3に依存させています。
または、modAのデフォルトはmodBのconf1のみに依存すると言いたい場合があります。
<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />