【问题标题】:Ivy deletion of unwanted (older) artifacts from Ivy cache常春藤从常春藤缓存中删除不需要的(旧)工件
【发布时间】:2011-04-12 06:35:15
【问题描述】:

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

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

查看 Ivy 文档后,我不知道该怎么做;有谁知道如何让 Ivy 在下载较新的工件时删除旧版本的工件,无论是通过解决任务还是其他方式?

【问题讨论】:

    标签: ivy


    【解决方案1】:

    在缓存中有“旧”jar 确实没有问题。如果您的项目不需要较旧的 jar,Ivy 将直接忽略它。旧 jar 在您的系统中占用大约 50 KB。在太字节驱动器时代,释放空间不值得花时间和精力。

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

    您可以执行<ivy:cleancache>,但这确实会清除您的整个缓存:所有内容都将被删除。它将摆脱 jar 的旧 1.0.4 版本,但它也将摆脱 jar 的 1.1.1 版本。当然,Ivy 会在下一次请求时下载它,但这意味着等待 Ivy 下载你所有的 jar。

    顺便说一句,这是<ivy:cleancache> 的一个大问题:如果您使用 Ivy 进行多个构建并且其中一个清理了您身上的缓存,那么您最终会破坏其他构建。通常,这不是个人用户的问题,但可能是持续集成系统的问题。

    如果您查看 Ivy 文档,它确实说 <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 的日期。

    忽略您的 Ivy 缓存目录,不要担心。如果 Ivy 缓存过大,您可以将其删除,Ivy 将根据需要重新下载新的 jar。

    【讨论】:

      【解决方案2】:

      我总是包含一个 ANT “realclean” 目标,它会另外清除我的 ivy 缓存。

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

      Doco

      【讨论】:

      • ivy:cleancache 的一个问题是它每次调用时都会删除缓存文件夹。因此,每次缓存都必须重新构建。这与需要缓存的操作相反。创建缓存违背了它必须提供的性能优势的目的。
      猜你喜欢
      • 2018-07-07
      • 2016-02-15
      • 2016-12-31
      • 2013-08-17
      • 2016-05-28
      • 1970-01-01
      • 2013-07-07
      • 2017-08-30
      • 2012-01-13
      相关资源
      最近更新 更多