2012-01-13 15 views
0

最近、Java Webアプリケーションにant-ivyを使用し始めました。すべての依存関係に対してtransitive = 'false'を指定し、log4jバージョン1.2.16を依存関係としてリストしました。私は強化されたパターンレイアウトに頼っているので、log4jの最新バージョンを使用しなければなりません。ivyビルド - 異なるバージョンの複数のアーティファクト

主な問題 - プロジェクトがビルドされると、ivy-libフォルダに複数のバージョンのlog4jが存在します。 Eclipseでパッケージエクスプローラを見ると、正しいバージョンが表示され、ivycachepathから1.2.16しかダウンロードされないようです。

任意のポインタ?各依存関係を個別に削除し、どのバージョンが古いバージョンを使用するのかを確認する必要がありますか?

ありがとうございました。

+0

あなたはおそらく、あなたのビルドファイルがどのようなものかを証明でした。いくつかの事が私を困惑させる。例えば、 "ivy-lib"はどういう意味ですか?次に、推移的な依存関係を無効にすることはあなたの権利ですが、依存関係管理を使用することの主な利点の1つを失うことになります。 –

+0

解決の前にlibフォルダを削除/消去しますか? ** sync = "true" **を検索タスクに指定しない限り、Ivyは古いアーティファクトを削除しません。 – oers

答えて

1

log4jを依存関係として「lib」というローカルディレクトリにダウンロードするant buildの例を紹介しました。

$ ant 
$ find lib 
lib 
lib/log4j-1.2.16.jar 

ご覧のとおり、1つのバージョンのjarファイルしか存在しません。これがあなたの問題の診断に役立つことを願っています。

のbuild.xml

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="retrieve"> 

    <property name="lib.dir" location="lib"/> 
    <property name="report.dir" location="report"/> 

    <target name="retrieve" description="Retrieve dependencies locally"> 
     <ivy:retrieve pattern="${lib.dir}/[artifact]-[revision](-[classifier]).[ext]"/> 

     <ivy:report todir="${report.dir}" graph="false"/> 
    </target> 

    <target name="clean" description="Remove build directories"> 
     <delete dir="${lib.dir}"/> 
     <delete dir="${report.dir}"/> 
    </target> 

    <target name="clean-all" depends="clean" description="clean ivy cache"> 
     <ivy:cleancache /> 
    </target> 

</project> 

ivy.xml

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

    <configurations defaultconfmapping="compile->default"> 
     <conf name="compile" description="jars used for compilation"/> 
    </configurations> 

    <dependencies> 
     <dependency org="log4j" name="log4j" rev="1.2.16"/> 
    </dependencies> 
</ivy-module> 
関連する問題