Ivy 从 Ivy 缓存中删除不需要的(旧的)工件

标签 ivy

我有一个本地 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 在下载较新的工件时删除旧版本的工件,无论是使用解析任务还是其他方式?

最佳答案

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

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

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

顺便说一句,这是<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。

关于Ivy 从 Ivy 缓存中删除不需要的(旧的)工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710923/

相关文章:

scala - sbt 发布本地 : Undefined resolver 'local'

java - Ivy:配置不存在

java - Ant Ivy 不会设置编译类路径

android - 有人知道如何解决Android Studio中的 Ivy 依赖吗?

java - jar 配置及其内容

ant - 我可以一起关闭 .ivy 缓存吗?

grails - Grails-尝试包含HTPPBuilder-链接错误

java.lang.ClassNotFoundException : org. springframework.web.servlet.DispatcherServlet 错误

java - 通过 WTP 将依赖项目部署到 Tomcat

java - 在 Ivy 中使用 Bintray maven 存储库