Sonatype Nexus 3 – 获取最新快照

我们刚刚将nexus安装升级到最新版本(3.x)。 有没有办法获得给定快照工件的最新版本? Nexus 2有一个不错的API,不再支持。

同样的问题(但对于旧版本)已在这里得到解答: Sonatype Nexus REST Api获取最新的构建版本

任何想法都受到高度赞赏。

最好,丹尼尔

Nexus 2有一个不错的API,不再支持。

听起来你指的是这些:

/service/local/artifact/maven/content /service/local/artifact/maven/redirect 

如果您要求找到最新的xyz-SNAPSHOT版本,其中x,y,z被猜到 – Nexus从未拥有此function(它仅适用于插件)。

这简直是​​不真实的 – 请参阅以下文章,该文章清楚地表明您可以指定LATEST,RELEASE或SNAPSHOT基本版本。

https://support.sonatype.com/hc/en-us/articles/213465488-How-can-I-retrieve-a-snapshot-if-I-don-t-know-the-exact-filename-

这是可能的,但不是一线。

是 – 除非您有一个工具,例如工件解析器 ,它使用一行命令来获取工件。

真是个笑话:Nexus 3没有REST API。

我发现了一个可以缓解我问题的黑客攻击。 事实certificate,ansible有一个很好的maven_artifact模块,能够以某种方式找出最新的快照。 你可以在本地运行ansible。 所以最终看起来像这样:

 ansible all -i localhost, -c local -m maven_artifact -a "repository_url=https://my-nexus/repository/maven-snapshots/ group_id=com.whatever artifact_id=my-artifact version=2.0-SNAPSHOT dest=./my-artifact.jar" 

如果您要求xyz-SNAPSHOT则默认情况下将下载最新的xyz-timestamp快照版本。 无需做任何额外的事情

如果您要求找到最新的xyz-SNAPSHOT版本,其中xyz被猜到 – Nexus从未拥有此function (它仅适用于插件)。 我认为没有任何好的用例。 如果需要,你可能做错了。 您始终应该使用特定版本。 实际上,即使是第一个function,我也想不出好的用例。

最近我们遇到了与nexus版本3.12.1-01相同的问题,所以肯定没有rest api来直接获取最新的快照

我们能够使用python one liner解决问题

 JSON_RESPONSE=$(curl -u un:pw -X GET "http://nexus-host/nexus/service/rest/beta/search/assets?maven.groupId=sample.group.id&maven.artifactId=sample&maven.extension=jar" -H "accept: application/json") echo $JSON_RESPONSE | python -c 'import sys, json; lines = json.load(sys.stdin)["items"]; sortedlines = sorted(lines, key=lambda k: k["downloadUrl"], reverse=True); print(sortedlines[0]["downloadUrl"])' 

希望能帮助到你

这是可能的,但不是一线。 您需要为之后的每个快照工件获取maven-metadata.xml(请注意,多模块项目对于每个模块(包括父模块)具有不同的时间戳)。

我们使用xlstproc来提取相关变量,因此我们仍然可以从命令行运行,而无需maven或ivy等重量级工具来执行解析。