如何在 Artifactory 中重建 maven-metadata.xml?

Posted

技术标签:

【中文标题】如何在 Artifactory 中重建 maven-metadata.xml?【英文标题】:How to rebuild maven-metadata.xml in Artifactory? 【发布时间】:2015-11-27 23:04:07 【问题描述】:

我们正在使用 Artifactory 3.9.2 并且必须合并具有相同 (SNAPSHOT-versioned) 工件的两个存储库的部分(通过复制工件)。这搞砸了maven-metadata.xml。在 Nexus 中,可以简单地为该工件重建元数据并让存储库管理器为您整理内容。我似乎找不到有关如何使用 Artifactory 执行此操作的任何链接/说明。有人可以告诉我怎么做吗?

【问题讨论】:

【参考方案1】:

接受的答案是关于 Artifactory REST API 解决方案,这确实是正确的解决方案。但是,由于我的组织中配置了代理,它对我不起作用。此外,我必须指定基本的身份验证详细信息。因此,发布对我有用的完整命令:-

curl -x http://proxy_host:proxy_port -kLu username:password -X POST https://artifactory-link/artifactory/api/maven/calculateMetadata/repository-name/location

这是 REST API 的 the documentation。

【讨论】:

【参考方案2】:

我们正在使用工件 4.4.2,我来到这里是因为 maven-metadata.xml 文件从我们使用 REST API 手动部署战争文件的工件的文件夹中丢失。

需要注意的重要一点是,如果没有 pom.xml 文件,calculateMetadata 将不会做任何事情! (source)

因此,在我们部署com/company/project/art/1.0/art-1.0.war 之后,我们需要制作一个“空白”art-1.0.pom 并将其部署到正确的位置。

这是一个空白 pom 的示例。

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd" 
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company.project</groupId>
  <artifactId>art</artifactId>
  <version>1.0</version>
  <description>POM was created from a script</description>
</project>

现在,我们注意到的第二件事 - 部署 art-1.0.pom 后,会自动计算 maven 元数据(至少对于具有默认 maven2 布局的本地 repo)。

因此,我们根本不需要通过 REST api 调用 calculateMetadata - 每当您上传 pom 时,它似乎都是自动的。

【讨论】:

这是正确的。除非有pom.xml,否则不能重新生成基于 Maven 的存储库的元数据。我的意思是maven-metadata.xml 的基础是什么?这对所有存储库管理器都是一样的。 组、工件和版本在存储库路径和工件名称中可用。所以我很有帮助,calculateMetadata 可以在没有 pom 的情况下工作。唉,我错了,必须经过反复试验才知道这一点。感谢您的评论以及上面的回答,@carlspring。 理论上,你说得对,这应该是绰绰有余的数据。但是,每个工件可以有多个扩展(例如.jar.dll 等),并且可以有分类器和校验和......并且存储库管理器必须弄清楚您的工件到底是什么......主要工件是,子工件是什么,什么是校验和,档案等......虽然它可以实现,但您无法确定实际用户是否可能做错事,或滥用系统...所以,我想这就是存储库管理器没有走这么远的原因。 除此之外,基于 Maven 的工件还包含 META-INF/maven/$groupId/$artifactId/pom.xml 下的 pom.xml,您可能会争辩说,如果工件的 .pom 不存在于文件系统中,那么您可以根据META-INF 中的on 重新生成maven-metadata.xml,但是...如果您有大量工件(及其版本),这可能比直接扫描文件系统需要更长的时间。所以......性能可能很糟糕,因此没有人这样做(据我所知)...... 好吧,这基本上会破坏您的 &lt;dependencies/&gt; 和任何工件的传递依赖关系,这取决于这些...此外,如果这些是发布版本并且已经为这些下载了 pom 文件,那么它们必须从本地缓存中删除...【参考方案3】:

我不确定这在 UI 中是否可行,但您可以使用 REST API 来实现。尝试使用curl 发布请求:

curl -v -X POST http://artifactory/artifactory/api/maven/calculateMetadata/my-repository/com/foo/bar

他们决定将其称为“计算元数据”而不是“重建元数据”,这不太适合恕我直言。

【讨论】:

好吧,我不一定会说这是错误的,当您在寻找与大多数人似乎使用的不同的术语时,很难找到文档。 文档:jfrog.com/confluence/display/RTF/…

以上是关于如何在 Artifactory 中重建 maven-metadata.xml?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 maven-publish 和 artifactory-gradle-plugin 生成 maven-metata.xml?

离线安装 Maven 存储库 - Artifactory

Artifactory中Maven仓库配置优化——提升Virtual仓库下载速度

Artifactory中Maven仓库配置优化——提升Virtual仓库下载速度

maven-metadata.xml 可以告诉 Artifactory 中上传的时间

三种Maven搭建私服的管理软件