2010-09-14 121 views
3

我有一个本地Artifactory存储库,其中有两个罐子commons-logging:一个用于version 1.0.4,另一个用于version 1.1.1。我正在尝试使用Ivy来下载一个带ant任务的旧版本(在ivy.xml中有适当的依赖标签),然后我将这个依赖标签的“rev”属性更改为1.1.1。常春藤从常春藤缓存中删除不需要的(旧)文物

当使用ivy:resolve in ant时,这个较新的jar被成功下载到我的缓存中,但较旧的jar不会自动删除,我想做到这一点。

我无法弄清楚在查看Ivy文档后如何去做;有谁知道如何让常春藤删除旧版本的工件时,下载新的,无论是解决任务或其他?

回答

2

我总是包含一个ANT“realclean”目标,它还额外清除我的常春藤缓存。

<target name="clean"> 
    <delete dir="${build.dir}"/> 
</target> 

<target name="realclean" depends="clean"> 
    <ivy:cleancache/> 
</target> 

Doco

+0

ivy的一个问题是:cleancache是​​它每次调用时都会删除缓存文件夹。因此每次缓存必须重新构建。这与缓存需要做的事情相反。创建缓存失败了它必须提供的性能优势的目的。 – 2012-08-28 10:40:56

4

有真的在你的缓存中的“老”罐子没有问题。如果你的项目不需要较旧的jar,常春藤会简单地忽略它。旧的jar在你的系统中占用大约50千字节。在太字节驱动时代,释放空间不值得花时间和精力。

常春藤缓存就是这样的:一个缓存。这是你的项目使用常春藤所有。如果一个较旧的项目需要1.0.4版本的commons-logging jar,它将已经在Ivy缓存中,并且不必下载,因此,像一个好的缓存一样,它可以节省您的时间和精力。

你可以做一个<ivy:cleancache>,但它确实可以擦洗整个缓存:所有内容都将被删除。它将摆脱较旧的1.0.4版本的jar,但它也会摆脱jar的1.1.1版本。当然,常春藤会在下次请求时下载它,但这意味着等待常春藤下载所有的罐子。

顺便说一下,这是<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创建的日期。

忽略你的Ivy缓存目录,不用担心。如果常青藤缓存变得太大,您可以删除它,常春藤会根据需要重新下载新的罐子。