0

私のプロジェクトはn 個のモジュールで構成されています。これらのうちの 1 つ、たとえばmy-first-moduleと呼ばれるものは、とりわけ次のような 1 つの依存関係を宣言します。

<dependency org="com.mycompany.myproject" name="my-second-module" conf="default->default" rev="1.0-SNAPSHOT"/>

アーティファクトは、jar を取得するときに正しく機能する内部リポジトリに格納されます。

デバッグ目的で実行します:

ant -d | grep my-second-module

出力には次のように表示されます。

sorting dependencies of com.mycompany.myproject#my-second-module / # of dependencies : 2

2 番目のモジュールは 2 つの外部依存関係を宣言しているため、これは正しいことです。次に、my-second-module のivy.xmlがリポジトリから正しく取得および解析されると仮定します。次に、Ivy はmy-second-moduleの依存関係を認識している必要があります

問題は、ivy がこれら 2 つの推移的な依存関係をフェッチしていないことです。

指定した宣言からわかるように、デフォルト構成を取得したいので、推移的に実行する必要があります。

4

1 に答える 1

5

プロジェクトをどのように構成したかを確認せずに何かを診断することは不可能です。

私が提供できる唯一のアドバイスは、アイビー依存関係管理レポートを生成し、「デフォルト」構成を確認することです。

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

おそらく、推移的な依存関係は、解決された他のモジュールによって上書きされています。たとえば、2 つのモジュールが同じモジュールの異なるリビジョンを取得する可能性があります。この場合、ivy は一方を選択し、もう一方を「削除」します。もう 1 つの可能性は、除外を宣言するモジュールです。これは、推移的な依存関係の欠落を説明します。

最後に、「フェッチ」の意味を明確にしましょう.... Ivy は依存関係を「解決」します。つまり、各モジュールを分析し、ローカル キャッシュにさまざまなファイルを格納します。Ivy には、ファイルをローカル ビルド ワークスペースに配置するための別の「取得」タスクがあります。

<ivy:retrieve pattern="${dist.dir}/WEB-INF/lib/[artifact].[ext]" conf="runtime"/>

つまり... つまり、ivy を実行すると、ファイルは実際にはリモート リポジトリからダウンロードされない可能性があります。(通常は $HOME/.ivy2/cache にあります)

于 2012-07-16T15:54:36.277 に答える