如何在 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
,但是...如果您有大量工件(及其版本),这可能比直接扫描文件系统需要更长的时间。所以......性能可能很糟糕,因此没有人这样做(据我所知)......
好吧,这基本上会破坏您的 <dependencies/>
和任何工件的传递依赖关系,这取决于这些...此外,如果这些是发布版本并且已经为这些下载了 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?
Artifactory中Maven仓库配置优化——提升Virtual仓库下载速度
Artifactory中Maven仓库配置优化——提升Virtual仓库下载速度