2012-07-10 7 views
5

私は、次のツタのファイルがあります。アイビー、マスター構成とは何ですか?なぜそれがjvyamlを引き出さないのですか?

<configurations defaultconfmapping="buildtime"> 
    <conf name="buildtime" visibility="private" description="Libraries needed only for compilation" /> 
    <conf name="runtime" description="Libraries only needed at runtime" /> 
    <conf name="test" description="Libraries only needed for testing" /> 
</configurations> 

<dependencies> 
    <dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime" /> 
    <dependency org="org.apache.solr" name="solr-core" rev="3.6.0" conf="runtime" /> 

</dependencies> 

を、私はアリを持ってこのようになりますタスク取得:奇妙なことがあること、である

<target name="retrieve-all" depends="resolve"> 
    <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]" conf="*" /> 
</target> 

をすべてのsolrの依存関係は、私が期待していたようにlib/runtimeにダウンロードされますが、jvyamlモジュールはそうではありません!それは解決さ "が、私はに依存関係の宣言を変更しない限りのlib /ランタイムディレクトリにダウンロードされません。

<dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->master" /> 

このマスター設定とは何ですか、なぜそれがSolrのjvyaml瓶を引くではなくするために必要とされますか?

ありがとう

答えて

19
私は次のようにあなたの構成を再編を示唆している

<ivy-module version="2.0"> 
    <info organisation="com.myspotontheweb" module="demo"/> 

    <configurations> 
     <conf name="compile" description="Libraries needed only for compilation" /> 
     <conf name="runtime" description="Libraries only needed at runtime" extends="compile" /> 
     <conf name="test" description="Libraries only needed for testing" extends="runtime" /> 
    </configurations> 

    <dependencies> 
     <dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->default" /> 
     <dependency org="org.apache.solr" name="solr-core" rev="3.6.0" conf="runtime->default" /> 
    </dependencies> 

</ivy-module> 

重要な変更が導入さ:

  1. より標準的な "コンパイル"構成を使用します。
  2. 構成継承 "extends"属性を使用します。コンパイル依存関係は、ランタイムとテストの両方の構成に自動的に含まれます。
  3. コンフィグレーションマッピングを使用します(例:conf = "runtime-> default")。これにより、どのローカル構成がどのリモート構成に関連付けられているかが明らかになります。

設定のマッピング

構成は、強力なツタ機能です説明。ツタのダウンロードは、それが内部変換を実行し、この回答に記載されている構成の標準セットを割り当て、Mavenのモジュール時:

依存関係を宣言するとき、それは常にを利用するためには良い考えです依存関係成果物がどこに割り当てられるかは間違いありません。例えば

<dependency org="??" name="??" rev="??" conf="runtime->default" /> 

ここでは、我々は地元の実行時設定に関連付けられたリモートモジュールの既定の依存関係を望んで言っています。

  • デフォルト:リモートモジュールのアーティファクトとすべてのそれはだランタイム推移的な依存
  • マスター:リモートモジュールの

    は実際には、あなたが実際に必要がありますのみ、2つのリモートコンフィギュレーションのマッピングがありますアーチファクトのみ(推移的な依存関係なし)

結論として、あなたの問題は、遠隔地電子Mavenのモジュールの「ランタイム」スコープではなく、あなたが

:-(

は私もツタを生成することをお勧めしたいいくつかの追加のアドバイスをモジュールjvyamlの非existant推移依存関係を取得して、Mavenのモジュールの成果物が含まれていません。

このレポートは、各依存関係がどのように異なる構成で終わるかを説明するのに役立ちます。推移的な依存関係がどのように管理されているかを判断するのに本当に便利です。そんなに

<target name="init" description="Resolve dependencies and set classpaths"> 
    <ivy:resolve/> 
    <ivy:report todir="${build.dir}/ivy-report" graph="false"/> 

    <ivy:cachepath pathid="compile.path" conf="compile"/> 
    <ivy:cachepath pathid="runtime.path" conf="runtime"/> 
    <ivy:cachepath pathid="test.path" conf="test"/> 
</target> 
+0

ありがとう:設定の継承が報わどこ

そして最後には、ここで作成ツタがANTクラスパスを管理し、です。あなたはそれを本当にうまく説明しました。私はこれを含むドキュメントの束を読んできました:http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.htmlしかし、もっと混乱してしまっただけです。 – rainkinz

+1

これを使ってApacheのドキュメントを交換してください。ありがとうございます@マーク –

+0

ありがとうございます、あなたはこれを私に非常に明確にしました。 +100 –

2

元のsolr-coreも取得されないことに注意してください。 解決後、キャッシュに行き、両方のモジュールのivy.xmlファイルを確認します。

彼らはconfに=マスターに彼らの成果物を公開することをあなたが表示されます、あなたはbuiltime構成はあなたの依存関係の「マスター」の設定を呼び起こす必要があることを示すために、明示的な設定のマッピングを行う必要があることだけ

<artifact name="jvyaml" type="jar" ext="jar" conf="master"/> 

<artifact name="solr-core" type="jar" ext="jar" conf="master"/> 

。 (構成マッピングをチェックする)。

<dependency org="org.apache.solr" name="solr-solrj" rev="3.6.0" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/> 

私はそれがマスター(*)ブツだと思う:あなたはivy.xmlファイルで見ることができるよう

は、しかし、Solrのコアの依存関係は、コンフィギュレーション・マッピングを持っています。

<dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->master" /> 

この1つは、ランタイムは、指定された依存関係にあるマスター構成を喚起すること言う:私はマッピングを行う依存関係を宣言するとき、私は通常、何

は、私自身のivy.xmlファイルです。

あなたにも

conf="runtime,test->master" 

行うことができます

関連する問題