0

Ivy 関数を実行するターゲットが、継続的ビルドおよびほとんどの開発者が実行するターゲットから完全に分離されるように、ant ビルドをセットアップしようとしています。1 つのターゲットに更新された依存関係をダウンロードしてもらいたいので、それをチェックインします。他のターゲットは、関連するディレクトリから *.jar を含めることでクラスパスを設定します。

私は2つの構成を持っています:

<configurations>
    <conf name="compile" />
    <conf name="test" />
</configurations>

私はいくつかの依存関係を持っています:

<dependency
    org="my.org"
    name="some-lib"
    rev="latest.release"
    conf="compile->default" />
<dependency
    org="my.org"
    name="some-test-lib"
    rev="latest.release"
    conf="test->default" />

そして、ivy:retrieve を使用して、これらの依存関係とその推移的な依存関係をダウンロードします。

<ivy:retrieve
    pattern="lib/[conf]/[type]/[artifact]-[revision].[ext]"
    sync="true"
    file="ivy.xml" />

問題は、推移的な依存関係に起因する、コンパイル ディレクトリとテスト ディレクトリの間で jar が重複していることです。これらすべての jar をチェックインしてクラスパスの作成に使用したいので、重複は避けたいと思います。これは可能ですか?

lib/compile/jar/some-lib-1.0.jar
lib/compile/jar/ slf4j-api-1.5.11.jar
lib/test/jar/some-test-lib-1.0.jar
lib/test/jar/junit -4.7.jar
lib/test/jar/ slf4j-api-1.5.11.jar

4

3 に答える 3

3

これは重複ではありません。各構成は jar の個別のセットであり、ivy の復元タスクは各セットを忠実に作成しています....

おそらく、ローカルのlibディレクトリに入力するよりも、クラスパスを直接作成する方が理にかなっているでしょう。

これが私のANTビルドファイルのスニペットです:

<target name="get-dependencies">
    <ivy:resolve/>

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

<target name="compile" depends="get-dependencies">
    <javac srcdir="src" destdir="build/classes" classpathref="compile.path"/>
</target>

私は通常、一連の jar ファイルのローカル コピーを作成する必要がある場合にのみ、ivy の取得タスクを使用します。たとえば、Web アプリのディレクトリを組み立てる場合です。

<ivy:retrieve pattern="build/WEB_INF/lib/[artifact].[ext]" conf="runtime"/>

アップデート

もう 1 つの方法は、次のように、一時的な依存関係をダウンロードするときに slf4j モジュールを除外するように ivy に指示することです。

<dependency org="my.org" name="some-lib" rev="latest.release" conf="compile->default">
    <exclude module="slf4j-api"/> 
</dependency>

<dependency org="my.org" name="some-test-lib" rev="latest.release" conf="test->default">
    <exclude module="slf4j-api"/> 
</dependency>
于 2010-06-22T19:31:02.197 に答える
0

以下を試してください。テストはコンパイルを拡張する必要があります

<dependency
org="my.org"
name="some-test-lib"
rev="latest.release"
conf="**test->compile**" />

私が正しければ、IVY はテストがコンパイルを拡張し、slf4j を 1 回だけダウンロードすることを見つけるはずです。

于 2010-06-24T02:04:25.983 に答える
0

Ivy を介して直接これを行うことができれば、それが最適です。今のところ、antを使用して重複を削除するだけで問題を解決しました。

于 2010-06-23T19:06:03.653 に答える