常春藤从常春藤缓存中删除不需要的(较旧的)工件

时间:2010-09-14 16:33:47

标签: ivy

我有一个本地Artifactory存储库,其中我有两个commons-logging的jar:一个用于version 1.0.4,另一个用于version 1.1.1。我正在尝试使用Ivy下载带有ant任务的旧版本(在ivy.xml中使用正确的依赖标记),然后我将此依赖标记的“rev”属性更改为1.1.1。

当使用常春藤:在ant中解析时,这个较新的jar会成功下载到我的缓存中,但是旧的jar不会自动删除,我想让它发生。

在查看常春藤文档后,我无法弄清楚如何做到这一点;有没有人知道如何在下载较新的工件时使用Ivy来删除旧版本的工件,无论是使用解析任务还是其他工作?

2 个答案:

答案 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>

Doco