69

Ivy依存関係タグのconf属性の完全な説明が見つかりません:

<dependency org="hibernate" name="hibernate" rev="3.1.3" conf="runtime, standalone -> runtime(*)"/>

そのconf属性を見ますか?->シンボルの右側についての説明(理解できる)が見つかりません。私はMavenについて最初に知らないことを覚えておいてください。そのことを考慮して、この属性を説明してください。

はい、私はすでにこれを見ました:http: //ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

ありがとう、
ダン

4

4 に答える 4

81

まず第一に、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.xmlmodA

<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*" />
于 2009-03-17T08:44:07.997 に答える
20

私はこれらの回答を読みましたが、率直に言って、あまり役に立ちません。それらは改善できると思うので、実際の例を示して、構成の使用方法と理解方法を書き留めました。

http://wrongnotes.blogspot.com/2014/02/simplest-explanation-of-ivy.html

残念ながら、Ivy は Maven リポジトリーを使用してこれらの jar ファイルをダウンロードしているため、maven とその依存関係について少し理解する必要があります。したがって、Ivy は Maven を理解する必要があり、Maven はそれをあなたに返します。しかし、Maven についてあまり詳しく説明することなく、非常にシンプルに保ったと思います。

于 2014-02-17T22:02:42.020 に答える
14

ありがとうVonC!

それは私をさらに助けてくれました。

オプション (構成) tieTYT に関しては、Ivy リポジトリーの ivy-[リビジョン番号].xml ファイルの組織名 --> モジュール名の下にあります。

http://www.springsource.com/repository/app/からダウンロードした JUnit 4.6 リビジョンの構成要素の例。

<configurations>
    <conf name="compile" visibility="public" description="Compile dependencies"/>
    <conf name="optional" visibility="public" extends="compile" description="Optional dependencies"/>
    <conf name="provided" visibility="public" description="Provided dependencies"/>
    <conf name="runtime" visibility="public" extends="compile" description="Runtime dependencies"/>
</configurations>

私のプロジェクトの ivy.xml ファイルには、構成のコンパイルとテストがあります。依存関係要素には、次の依存関係があります。

<dependency org="org.junit" name="com.springsource.org.junit"
        rev="4.6.0" conf="compile-test->compile" />

ご覧のとおり、私のコンパイル/テスト構成は、JUnit の ivy.xml ファイルのコンパイル構成に依存しています。

于 2009-07-31T20:50:36.627 に答える
9

このように物事を理解するのに役立ちました:

  1. ivy 構成は、モジュールのアーティファクトのサブセットの単なる名前です。
  2. モジュール間の依存関係は、構成名で指定されます。
于 2010-05-04T17:15:15.010 に答える