常春藤:强制依赖本地快照

Posted

技术标签:

【中文标题】常春藤:强制依赖本地快照【英文标题】:Ivy: Forcing local snapshot for dependency 【发布时间】:2011-10-24 19:07:28 【问题描述】:

我有一个依赖于项目 B 的项目 A;两者都是积极开发的内部项目。 假设最新的 Project A 版本是 1.1.2,它依赖于 Project B 1.1.1。 现在我们正在开发 Project A 1.2.0,它依赖于也在开发中的 Project B 1.2.0。

<dependency org="my.org" name="projectB" rev="1.2.0" transitive="true" conf="..." changing="true"/>

项目 B 1.2.0 的新集成构建由 CI 服务器推送到公共本地存储库中,因此由于“更改”,每个人都可以在发布后立即获得最新的集成构建。

假设 Bob 正在项目 A 上开发一项新功能,需要对项目 B 进行一些修改;他在他的本地私有存储库中发布了一个新的 shapshot Project B 1.2.0,并且他在构建中被选中,因为它比公共存储库中的更新。到目前为止一切正常。

但是如果 Alice 在项目 B 中提交了一些东西,CI 服务器会在 common repo 上推送一个新的 1.2.0,它比 Bob 在本地拥有的更新;现在 Bob 获得了覆盖他本地更改的通用版本。

当然,我可以使用不同的名称(以一种巧妙的方式使用属性文件,名称不必以 ivy.xml 结尾),例如 Bob 的 1.2.0_snapshot,只要 Bob 需要本地版本,然后普通版ok后切换回1.2.0。 但是有没有办法强制使用状态为“快照”的工件(这将始终是本地构建的状态)而不是具有“集成”的工件(由 CI 服务器生成的工件将始终具有该状态)或更高?

我尝试了“latest.snapshot”,但它需要集成版本,如果更新的话。

处理这种模式的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我认为您希望本地解析器处于“强制模式”。在 ivysettings.xml 中的本地解析器上设置 force="true"。

强制模式说明见:http://ant.apache.org/ivy/history/latest-milestone/settings/resolvers.html

【讨论】:

我查看了强制模式,但似乎不适合我的情况:它在解析器级别工作(而我想让它针对不同的依赖项以不同的方式工作)并且文档说“在内部它用“latest.integration”替换了请求的修订,这不是我需要的。无论如何感谢您的反馈。

以上是关于常春藤:强制依赖本地快照的主要内容,如果未能解决你的问题,请参考以下文章

常春藤发布到存储库不会更新本地缓存

请参阅 VSTS 中的一个文件夹,该文件夹包含我的项目构建文件中的本地常春藤存储库

使用 maven 存储库作为本地常春藤缓存

本地存储库的好常春藤教程? [关闭]

Maven 3 不会从本地存储库更新快照依赖项

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