web-dev-qa-db-ja.com

誰かがivy.xml依存関係のconf属性を説明できますか?

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

おかげで、
ダン

65
Daniel Kaplan

まず、 IvyはMavenではありません ;)
Maven2はソフトウェアプロジェクト管理および理解ツールですが、Ivyは依存関係管理ツールにすぎません。

Ivyは、configurationと呼ばれる独自の概念に大きく依存しています。
Ivyでは、モジュール構成はモジュールの使用方法または表示方法です。
たとえば、モジュールにテストおよびランタイム構成を設定できます。ただし、MySQLとOracleの構成を持つこともできます。または、HibernateおよびJDBC構成。

各構成で、次を宣言できます。

  • 必要なアーティファクト(jar、war、...).
  • 他のモジュールへの依存関係、および必要な依存関係の構成を記述します。これは構成マッピングと呼ばれます。

したがって、 conf 属性は正確にそれを行います:依存関係の構成マッピングを記述します。
マップされた子要素 は、「->シンボル」とマップされた依存関係構成の名前を表します。'*'ワイルドカードを使用して、このモジュールのすべての構成を指定できます。


Maven2の側にはscopeと呼ばれるものがあります。
テストスコープまたはビルドタイムスコープの一部として依存関係を宣言できます。
次に、このスコープに応じて、スコープに依存する依存関係を持つ依存関係アーティファクト(maven2のモジュールごとに1つのアーティファクトのみ)を取得します。スコープはmaven2で事前定義されており、変更することはできません。

ということは:

多くのライブラリに不要な依存関係がダウンロードされているlotがあります。
たとえば、Hibernateは多くのJBoss JARをダウンロードし、Display TagはすべてのさまざまなWebフレームワークJARをダウンロードします。追加した依存関係とほぼ同じ数の依存関係を除外していることに気付きました。

問題は、Hibernateが複数のキャッシュ実装、複数の接続プール実装で使用できることです。そして、これはスコープでは管理できません。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 "または" dbcp,swarmcache "、必要なものを指定しますexactlyモジュール「hibernate」から。


ライブラリに関連付けられた各モジュールに定義された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つの構成があるとします。
実際問題として、依存関係要素のconf属性を省略したいことは非常に珍しいことです。
ivy.xml for 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*" />
74
VonC

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

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

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

16
chubbsondubs

VonCに感謝します!

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

オプション(構成)tieTYTについては、Ivyリポジトリーのivy- [revision number] .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ファイルのコンパイル構成に依存しています。

13
Espen

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

  1. ツタの設定は、単にモジュールのアーティファクトのサブセットの名前です。
  2. モジュール間の依存関係は、構成名の観点から指定されます。
7
Archie