19

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

相同的问题(但对于旧版本)已在此处得到解答: Sonatype Nexus REST Api fetch latest build version

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

最好的,丹尼尔

4

11 回答 11

13

截至 2019 年 4 月,Sonatype Nexus 3 中有一个 REST API,用于访问最新的人工制品

文档在这里

http://community.sonatype.com/t/nxrm-3-16-rest-search-and-filtering-enhancements/1586

将此端点/service/rest/v1/search/assets/downloadrepository,groupname参数一起使用。排序方式version将为您提供最新的时间戳快照。

https://nexus.blahblah.com/service/rest/v1/search/assets/download?repository=maven-snapshots&group=com.my.company&name=myArtefact&sort=version&direction=desc

于 2019-08-15T15:54:11.327 回答
6

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

听起来你指的是这些:

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

如果您要查找猜测 x、y、z 的最新 xyz-SNAPSHOT 版本 - Nexus 从来没有此功能(它仅适用于插件)。

这是不真实的 - 请参阅下面的文章,它清楚地表明您可以指定 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-

这是可能的,但不是在 1-liner 中。

是的 - 除非您有一个方便的工具,例如artifact-resolver,它确实使用单行命令来获取工件。

于 2017-01-09T20:38:51.183 回答
4

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

我发现了一个可以缓解我的问题的 hack。事实证明,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"
于 2017-01-19T22:12:12.323 回答
4

curl使用,jqsortbash单线tail

NEXUS_URL=https://your-nexus.com
MAVEN_REPO=maven-snapshots
GROUP_ID=...
ARTIFACT_ID=...
VERSION=2.0.1-SNAPSHOT
FILE_EXTENSION=jar

download_url=$(curl -X GET "${NEXUS_URL}/service/rest/v1/search/assets?repository=${MAVEN_REPO}&maven.groupId=${GROUP_ID}&maven.artifactId=${ARTIFACT_ID}&maven.baseVersion=${VERSION}&maven.extension=${FILE_EXTENSION}" -H  "accept: application/json"  | jq -rc '.items | .[].downloadUrl' | sort | tail -n 1)

wget $download_url
于 2019-03-15T10:39:08.287 回答
2

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

如果您要查找, ,被猜到的最新x.y.z-SNAPSHOT版本- Nexus 从来没有这个功能(它只适用于插件)。而且我认为这没有什么好的用例。如果需要这样做,您可能做错了什么。您始终应该使用特定版本。实际上,即使是第一个功能,我也想不出好的用例。xyz

于 2016-12-30T09:56:54.530 回答
1

最近我们在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"])'

希望能帮助到你

于 2018-07-18T11:31:47.507 回答
1

使用 OSS 3.21.2-03,我在 zip 扩展文件上检索了带有以下 url 的最新快照:

{nexus_host}/service/rest/v1/search/assets/download?sort=version&repository={repository_name}&group={group_id}&name={artifact-id}&maven.extension=zip
于 2020-04-14T11:07:44.863 回答
0

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

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

于 2016-12-30T09:12:31.063 回答
0

我整理了一个可以上传到 Nexus 的 groovy 脚本,它通过 POST 请求解决了这个特定问题。

您可以在此处找到脚本和一些使用说明:https ://github.com/rbjorklin/resolve-latest-nexus-artifact

于 2018-11-01T09:14:44.210 回答
0

你可以用 curl 下载

curl -L --header 'Accept: application/json' "https://${NEXUS_URL}/service/rest/beta/search/assets/download?repository=${NEXUS_REPO_NAME}&maven.groupId=${MVN_GROUP_ID}&maven.artifactId=${MVN_ARTIFACT_ID}&maven.baseVersion=${APP_VERSION}&maven.extension=${MVN_EXTENSION}"
于 2019-02-25T15:03:13.800 回答
0

就我而言,我没有得到任何回报,因为我缺少 Nexus 服务器所需的凭据。一旦我将它们添加到 CURL 和 WGET 命令中,它就对我有用。

NEXUS_URL=https://your-nexus.com
MAVEN_REPO=maven-snapshots
GROUP_ID=...
ARTIFACT_ID=...
VERSION=2.0.1-SNAPSHOT
FILE_EXTENSION=jar

download_url=$(curl --user admin:yourpassword -X GET "${NEXUS_URL}/service/rest/v1/search/assets?repository=${MAVEN_REPO}&maven.groupId=${GROUP_ID}&maven.artifactId=${ARTIFACT_ID}&maven.baseVersion=${VERSION}&maven.extension=${FILE_EXTENSION}" -H  "accept: application/json"  | jq -rc '.items | .[].downloadUrl' | sort | tail -n 1)

wget --user=admin --password=mypassword $download_url

于 2021-01-11T06:05:28.503 回答