首页 文章

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

提问于
浏览
4

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

当使用ivy:resolve in ant时,这个较新的jar会成功下载到我的缓存中,但旧的jar不会自动删除,我想让这件事发生 .

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

2 回答

  • 2

    在缓存中使用“旧”jar确实没有问题 . 如果您的项目不需要旧 jar ,Ivy会忽略它 . 旧jar在你的系统中占用大约50千字节 . 在Terabyte驱动器的时代,释放空间并不值得花费时间和精力 .

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

    你可以做一个 <ivy:cleancache> ,但它真的擦洗你的整个缓存:一切都将被删除 . 它将摆脱旧的1.0.4版本的jar,但它也将摆脱jar的1.1.1版本 . 当然,Ivy会在下次要求时下载它,但这意味着等待Ivy下载所有的jar .

    顺便说一句,这是 <ivy:cleancache> 的一个大问题:如果你最终打破了其他版本 . 通常,这不是个别用户的问题,但它可以用于持续集成系统 .

    如果你看一下常 Spring 藤文档,它确实说 <ivy:cleancache> 与以下相同:

    <delete dir="${ivy.cache.dir}" />
    

    您可以使用它作为使用日期selector删除旧 jar 的基础:

    <delete dir="${ivy.cache.dir}">
        <date datetime="01/01/2010 12:00 AM" when="before"/>
        <include name="*.jar"/>
    </delete>
    

    但是,它使用jar的修改日期而不是jar的创建日期 .

    忽略你的常 Spring 藤缓存目录,不要担心它 . 如果Ivy缓存确实太大,你可以删除它,Ivy只需根据需要重新下载新的jar .

  • 4

    我总是包含一个ANT“realclean”目标,它还会清除我的常 Spring 藤缓存 .

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>
    
    <target name="realclean" depends="clean">
        <ivy:cleancache/>
    </target>
    

    Doco

相关问题