2009-03-16 8 views
60

私はアイビー依存タグのconfに属性のいずれかの完全な説明を見つけることができません。誰かがivy.xml依存関係の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

おかげで、
ダン

+0

リクエストに応じて詳細をいくつか追加しました – VonC

答えて

69

まず、Ivy is not Maven;)アイビーであるのに対し
Maven2をには、ソフトウェアプロジェクトの管理や理解のためのツールであります依存関係管理ツールのみ。

Ivyは、構成と呼ばれる独自の概念に大きく依存しています。
ivyでは、モジュール構成はであり、使用する方法またはモジュールを見る方法です。
たとえば、モジュールにテストおよびランタイム設定を含めることができます。しかし、あなたはmysqlとoracle設定を持つこともできます。または、休止状態とjdbc構成です。各構成で

あなたが宣言することができます:アーティファクト(JAR、WAR、...)が必要とされているものを

  • を。
  • あなたの他のモジュールへの依存関係と、あなたが必要とする依存関係の構成について記述してください。これは構成マッピングと呼ばれます。

したがって、conf属性は次のように正確になります。依存関係の構成マッピングについて説明します。
mapped child elementは、「->シンボルの右側」であり、マップされた依存関係構成の名前を表します。 '*'ワイルドカードを使用して、このモジュールのすべての構成を指定できます。その側に


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

は、多くのライブラリをダウンロードし、不要な依存関係のたくさんがあります。
たとえば、Hibernateは一連のJBoss JARをダウンロードし、Display TagはさまざまなWebフレームワークJARをすべてダウンロードします。私は追加したのとほぼ同じくらい多くの依存関係を除いて自分自身を見つけました。

問題は、Hibernateはいくつかのキャッシュ実装、いくつかの接続プールの実装で使用することができるということである...そして、これはスコープで管理することができない、のwheresアイビー構成は、この種の問題にエレガントなソリューションを提供しています。そのproxoolとOSCacheの実装で休止状態を取得するために

<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/> 

、そのよう:
たとえばは、ツタで、仮定Hibernateはその後、あなたがそのような依存関係を宣言することができ、この1ようなツタのファイルがあります。

<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->dbcp,swarmcache"/> 

dbcpとswarmcacheで休止状態になる。 「proxool,oscache」または「dbcp,swarmcache」にデフォルトmaster設定をマッピングすることにより

、あなたが必要なものを指定し、正確モジュールから「休止状態」。


これらの「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> 

Example

のはmodAは、二つの構成、デフォルトおよびテストを持っているとしましょう。
実際には、dependency要素のconf属性を削除することは非常に珍しいことです。 modAため
ivy.xmlは依存関係があるかもしれません:

<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*" /> 
+5

私はほとんどそれを得ると思います。しかし、あなたの選択肢はどこにありますか?あなたはproxool、oscache/dbcp、swarmcacheと言うことができますか? –

+1

デフォルトの推移的な依存関係を除外し、あなたの選択を明示的にすることによって、Mavenで "不要な依存関係をダウンロードしました"ということを解決できます。しかし、私はそれが決して "エレガント"ではないことを最初に認めます。 – mezmo

+2

+1は非常に明確な応答です。 http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html –

13

おかげ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ファイルでのコンパイルの設定に依存します:依存関係の要素で、私は次の依存関係を持っています。

+1

そこにあなたの答えを完全に逃した。良いイラストレーション。 +1 – VonC

7

それは、物事をこのように理解するために、一度私を助け:

  1. ツタの設定は、単にモジュールの成果物のいくつかのサブセットの名前です。
  2. モジュール間の依存関係は、構成名の観点から指定されます。
10

私はこれらの回答を読んだことがあります。私は、彼らはので、私は、私がどのように使用するか書き留めた改善と実用的な例を示すことによって、構成を理解することができると思います:

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

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

+0

非常に便利な記事ですが、あなたが知る必要があるmavenスコープについて説明しているこのリンクも好きかもしれませんhttp://stackoverflow.com/questions/7104364/how-are-maven-scopes-mapped-to-アイビー・コンフィギュレーション・バイ・アイビー – pvgoddijn