我们刚刚将nexus升级到了最新版本(3.x)。有没有办法获取给定快照构件的最新版本?Nexus 2有一个不再支持的好API。
同样的问题(但是针对旧版本)已经在这里回答过: Sonatype Nexus REST Api fetch latest build version
非常感谢任何想法。
最好的祝福, 丹尼尔
我们刚刚将nexus升级到了最新版本(3.x)。有没有办法获取给定快照构件的最新版本?Nexus 2有一个不再支持的好API。
同样的问题(但是针对旧版本)已经在这里回答过: Sonatype Nexus REST Api fetch latest build version
非常感谢任何想法。
最好的祝福, 丹尼尔
http://community.sonatype.com/t/nxrm-3-16-rest-search-and-filtering-enhancements/1586
使用此端点/service/rest/v1/search/assets/download
,并提供repository
、group
和name
参数。按version
排序可获取最新的时间戳快照。
&maven.baseVersion=master-SNAPSHOT&maven.classifier=sql&maven.extension=zip
。 - Karsten Spang-L
选项来实际下载找到的构件,以及-o
选项来指定输出文件名。 - Karsten SpangNexus 2曾经拥有一个不再支持的好API。
看起来你在提到这些内容:
/service/local/artifact/maven/content
/service/local/artifact/maven/redirect
这是可能的,但不是一行代码就能实现的。
是的,除非你有一个方便的工具,比如artifact-resolver,它可以使用一行命令来获取一个构件。
关于Nexus 3没有REST API,真是个笑话。
我发现了一个小技巧,解决了我的问题。原来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"
Bash一行命令使用curl
、jq
、sort
和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
x.y.z-SNAPSHOT
,则默认情况下将下载最新的x.y.z-timestamp
快照版本。无需进行任何其他操作。x.y.z-SNAPSHOT
的最新版本,其中x
、y
、z
是猜测的 - Nexus从未具备此功能(仅对插件有效)。而且我认为没有任何好的用例。如果需要这样做,则您可能正在做错事情。您应该始终使用特定的版本。实际上,即使对于第一个功能,我也想不出好的用例。你可以使用 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}"
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"])'
使用OSS 3.21.2-03版本,我使用以下URL检索了最新的快照,该文件为zip扩展名:
{nexus_host}/service/rest/v1/search/assets/download?sort=version&repository={repository_name}&group={group_id}&name={artifact-id}&maven.extension=zip
这是可能的,但不是一行代码就能搞定的。你需要获取每个快照构件的maven-metadata.xml文件(注意,多模块项目中每个模块包括父模块都有不同的时间戳)。
我们使用xlstproc来提取相关变量,因此我们仍然可以在命令行上运行,而无需像maven或ivy这样的重量级工具来进行解析。