我有一个本地Artifactory存储库,其中我有两个commons-logging
的jar:一个用于version 1.0.4
,另一个用于version 1.1.1
。我正在尝试使用Ivy下载带有ant任务的旧版本(在ivy.xml中使用正确的依赖标记),然后我将此依赖标记的“rev”属性更改为1.1.1。
当使用常春藤:在ant中解析时,这个较新的jar会成功下载到我的缓存中,但是旧的jar不会自动删除,我想让它发生。
在查看常春藤文档后,我无法弄清楚如何做到这一点;有没有人知道如何在下载较新的工件时使用Ivy来删除旧版本的工件,无论是使用解析任务还是其他工作?
答案 0 :(得分:4)
在缓存中使用“旧”jar确实没有问题。如果您的项目不需要旧罐子,Ivy会忽略它。旧jar在你的系统中占用大约50千字节。在Terabyte驱动器的时代,释放空间并不值得花费时间和精力。
常春藤缓存就是:缓存。这是使用Ivy的 ALL 项目。如果一个较旧的项目需要1.0.4版本的commons-logging jar,它将已经在常春藤缓存中而不必下载,因此,就像一个好的缓存一样,它可以节省您的时间和精力。
你可以做一个<ivy:cleancache>
,但这真的会擦除你的整个缓存:一切都将被删除。它将摆脱旧的1.0.4版本的jar,但它也将摆脱jar的1.1.1版本。当然,Ivy会在下次要求时下载它,但这意味着等待Ivy下载你的所有罐子。
顺便说一下,这是<ivy:cleancache>
的一个大问题:如果您正在使用Ivy进行多个构建,并且有人清除了您的缓存,那么您最终会破坏其他构建。通常,这不是个别用户的问题,但它可以用于持续集成系统。
如果您查看常春藤文档,它会说<ivy:cleancache>
与以下内容相同:
<delete dir="${ivy.cache.dir}" />
您可以使用它作为使用日期selector删除旧罐子的基础:
<delete dir="${ivy.cache.dir}">
<date datetime="01/01/2010 12:00 AM" when="before"/>
<include name="*.jar"/>
</delete>
但是,它使用jar的修改日期而不是jar的创建日期。
忽略您的常春藤缓存目录,不要担心它。如果常春藤缓存太大,你可以删除它,Ivy只需根据需要重新下载新的jar。
答案 1 :(得分:2)
我总是包含一个ANT“realclean”目标,它还会清除我的常春藤缓存。
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="realclean" depends="clean">
<ivy:cleancache/>
</target>