2012-01-13 82 views
0

我們最近開始對java web應用程序使用ant-ivy,並且目前的旅程一直很好。我已經爲所有依賴項指定了transitive ='false',並將log4j版本1.2.16列爲依賴項。我必須使用最新版本的log4j,因爲我依賴於增強的模式佈局。常春藤構建 - 不同版本的多個構件

主要問題 - 當項目建立時,ivy-lib文件夾中有多個版本的log4j。在Eclipse中查看包資源管理器時,我看到了正確的版本,並且似乎僅從ivycachepath下載了1.2.16。

任何指針?我是否需要單獨刪除每個依賴項,並查看哪個版本帶來舊版本?

感謝您的幫助。

+0

也許你可以展示你的build文件看起來像什麼。幾件事讓我困惑。例如,「ivy-lib」是什麼意思?其次關閉傳遞依賴是你的權利,但是你將失去使用依賴管理的主要好處之一。 – 2012-01-13 23:50:32

+0

您是否在每次解決之前刪除/清除lib文件夾?除非您爲檢索任務指定** sync =「true」**,常春藤不會刪除舊的工件。 – oers 2012-01-16 12:42:53

回答

1

我已經包含了一個示例ant build,它將log4j作爲依賴項下載到名爲「lib」的本地目錄中。

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

正如您所見,只有一個版本的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>