【问题标题】:Apache ivy unpublish task?Apache ivy 取消发布任务?
【发布时间】:2013-05-28 21:54:15
【问题描述】:

似乎没有 ivy:unpublish 任务(例如,参见 here)。

所以,我认为应该在文件系统级别手动或通过删除 ~/.ivy2/local 子文件夹的 Ant 任务执行未发布? (当目标是从本地 ivy 存储库中取消发布时)。

【问题讨论】:

    标签: ivy


    【解决方案1】:

    我很惊讶您接受了 Mark 的回答,因为 AFAICT 与您的用例无关,它与您的本地存储库有关 - 即您系统上的私有存储库。他的回答仅与共享存储库有关。

    我怀疑 Ivy 有一个非常常见的用例。一位开发人员正在临时从事两个项目,其中一个项目依赖于另一个项目。当他们做这项工作时,他们将上游项目的 SNAPSHOT 发布到他们的本地存储库,以便下游项目“看到”他们的更改。当开发人员完成这项任务后,他们将更改签入到源代码控制中,然后想要“重新加入组”并获取上游项目的最新 SNAPSHOT 依赖项。此时,他们希望从本地存储库中“取消发布”上游项目,以便他们继续使用组中其他开发人员的更改。

    关于它的价值,另请参阅this Ivy Jira issue,从 2006 年开始。

    正如我在几周前的评论中指出的那样,我怀疑存在一些我不知道的最佳实践,这使得这没有实际意义。有人吗?

    【讨论】:

    • 公平点,然而,Ivy 并不完全支持快照版本,这是 Maven 的一个特性。作为这两种技术的用户,我对这个问题持开放态度,但随着我开始支持持续交付系统,我倾向于远离快照发布。 (一种构建类型,每个构建都是一个潜在版本)
    • @MarkO'Connor - 在所描述的用例中,从事两个需要在本地推广以将它们粘合在一起的项目,你会怎么做?正如您似乎在暗示的那样,您是否使用系统本地的一些私有版本号?还是您从未遇到过这种用例?
    • ivy 有一种替代机制用于开发构建,它利用动态修订版“latest.integration”和“latest.release”。如果您在本地发布集成版本并发布到共享存储库中,我认为这将实现您所寻找的。新版本进入共享存储库后,将使用“latest.release”解决。 "latest.integration" 也会在您在本地发布新的开发版本之前获取它。
    • @MarkO'Connor - OP 的问题与是否使用快照无关 - 它与如何在不再需要时最好地从本地存储库中删除工件有关。我不同意你的观点,即快照在 Ivy 中被破坏了,对我们来说,它们在 latest.release/integration 无法启动的地方很有用——但这与 OP 的问题无关,所以我不会详细说明。
    • 让我们同意不同意,尽管我不认为我们相距甚远。问题得到了回答。 Ivy 没有“取消发布”任务。
    【解决方案2】:

    不,ivy 不支持取消发布操作。同样Maven不支持这样的操作。

    不确定我是否理解用例。当一个人“发布”内容时,以后删除它通常是一个非常糟糕的主意……为什么?

    • 您可能会意外破坏其他人的依赖于您的版本的构建。
    • 存储库缓存通常假定已发布的工件永远不会更改。如果存在它们消失的可能性,这会强制缓存不断“拨回家”以确保它们不脏。

    话虽如此,有反对的理由。我建议阅读以下来自 sonatype 的优秀博客文章:

    【讨论】:

    • 马克,看看我的“答案”...有什么想法吗?
    猜你喜欢
    • 2014-11-27
    • 2015-03-11
    • 2012-09-09
    • 2016-08-16
    • 2012-02-29
    • 2012-05-31
    • 1970-01-01
    • 2011-11-13
    • 2011-11-12
    相关资源
    最近更新 更多