次のように構成を再構築することをお勧めします。
<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>
導入された重要な変更:
- より標準的な「コンパイル」構成を使用する
- 「extends」属性を使用した構成の継承。コンパイルの依存関係は、ランタイム構成とテスト構成の両方に自動的に含めることができます。
- 構成マッピングを使用します。たとえば、conf="runtime->default" です。これにより、どのローカル構成がどのリモート構成に関連付けられているかが明確になります。
構成マッピングの説明
構成は、強力な Ivy 機能です。ivy が Maven モジュールをダウンロードすると、内部変換が実行され、この回答にリストされている標準の構成セットが割り当てられます。
依存関係を宣言するときは、常に構成マッピングを使用することをお勧めします。これにより、依存関係のアーティファクトがどこに割り当てられているかが明確になります。
例えば:
<dependency org="??" name="??" rev="??" conf="runtime->default" />
ここでは、リモート モジュールのデフォルトの依存関係をローカル ランタイム構成に関連付けたいと言っています。
実際には、実際に必要なリモート構成マッピングは 2 つだけです。
- default : リモート モジュールのアーティファクトとその実行時の推移的な依存関係すべて
- master : リモート モジュールのアーティファクトのみ (推移的な依存関係なし)
結論として、あなたの問題は、リモートMavenモジュールの「ランタイム」スコープにMavenモジュールのアーティファクトが含まれていないという事実によって引き起こされたと思います。代わりに、モジュールjvyamlの存在しない推移的な依存関係を取得していました:-(
追加のアドバイス
次のように、アイビーの依存関係管理レポートを生成することもお勧めします。
<target name="init" description="Resolve dependencies and populate lib dir">
<ivy:resolve/>
<ivy:report todir="${build.dir}/ivy-report" graph="false"/>
<ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]"/>
</target>
レポートは、各依存関係が異なる構成でどのようになるかを説明するのに役立ちます。また、推移的な依存関係がどのように管理されているかを判断するのにも非常に役立ちます。
そして最後に、構成の継承が功を奏し、ivy 管理の ANT クラスパスを作成するのは次のとおりです。
<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>