如何让工件更新虚拟仓库的 maven-metadata.xml?
Posted
技术标签:
【中文标题】如何让工件更新虚拟仓库的 maven-metadata.xml?【英文标题】:How to get artifactory to update the maven-metadata.xml for a virtual repo? 【发布时间】:2014-04-24 20:05:26 【问题描述】:长期阅读,第一次提问......
我有一个独立的网络(无法访问互联网)。它有一个具有虚拟 libs-snapshot 和 libs-release 存储库的工件服务器。在 libs-snapshot 下,有 4 个本地快照存储库。这样做的原因是我们从其他地方(未连接)获得了所有人工仓库的转储,并将其导入到这个网络。但是我们必须在那里修改快照工件的一个子集。因此,我们创建了另一个本地快照存储库,将其命名为 mine-snapshot-local(maven 2 存储库,设置为唯一,最大工件=1?),并将其添加到 库的顶部-快照虚拟。从理论上讲,这将允许我们修改我们需要的少量工件,部署到我们自己的存储库,本地开发人员会选择这些。但是我们仍然可以从其他非连接系统的定期转储中访问 99% 的其他工件。此外,我们可以从其他网络批量导入同时修改的 drop,而无需接触我们的独立网络存储库 (mine-snapshot-local)。我想我们正在“分支”工件存储库......
我意识到我们可能可以直接部署到一个导入的存储库中,但是下次我们从另一个网络获得转储时,所有那些自定义修改的工件都会消失......所以我真的很想得到如果可能,这种方法可以工作。
从我的本地 Eclipse 中,maven 插件将工件显式部署到 mine-snapshot-local 存储库,并且没有错误。我看到的问题是虚拟 libs-snapshot 的 maven-metadata.xml 没有更新。该文件的时间戳已更新,如果我使用 Web 浏览器浏览 libs-snapshot/whatever_package,我可以看到我新部署的工件,其时间戳比现有快照更新。但是 maven-metadata.xml 文件仍然包含指向“旧”快照的指针。
maven-metadata.xml 已在 mine-snapshot-local 存储库中成功更新,但好像 artifactory 没有为虚拟存储库正确地将所有元数据文件合并在一起。或者,更有可能的是,我错误地配置了一些东西,导致它以某种方式忽略我们的顶层本地 repo(但为什么快照 jar/pom 仍然出现在那里?)。
我们使用的是 artifactory 2.6.1(并且没有升级选项)。
我尝试了很多方法:将快照存储库设置为唯一、非唯一、部署程序、限制快照数量等。这些似乎都没有太大区别。
我认为可能存在问题的一件事是分配给快照的内部版本号。例如,在导入的仓库中,工件可能有一个一周前的时间戳,但内部版本号为 4355。在我的新仓库中,当我部署时,我有一个更新的时间戳,但内部版本号是 1(或比 4355 小得多的东西)。
我是不是通过尝试像这样拥有多个本地快照存储库来找出错误的树?看起来这应该没问题,但也许不是。
【问题讨论】:
【参考方案1】:您使用的是非常(但非常)旧版本的 Artifactory,可能是您遇到了一个早已不复存在的问题。正常行为应该是,如果您有 4 个 maven 存储库,并且您将新工件更新/部署到其中一个存储库中,则虚拟存储库应聚合所有列出的存储库中的元数据。
只是为了验证一下,您提到您正在从 Eclipse 进行部署,您指的是 P2 吗?如果只是附带说明,Artifactory 将不会计算 P2 工件的元数据。
【讨论】:
好的,既然我已经回复了,我发现这是一个 3 年前的帖子,所以它可能不相关...... :)以上是关于如何让工件更新虚拟仓库的 maven-metadata.xml?的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ③ ( 配置上传工件 | 将 Gradle 插件 jar 包源码文档上传到本地Maven 仓库 )