我们刚刚将nexus安装升级到最新版本(3.x)。有没有办法获得给定快照工件的最新版本? Nexus 2有一个不错的API,不再支持。
同样的问题(但旧版本)已经在这里得到解答: Sonatype Nexus REST Api fetch latest build version
任何想法都受到高度赞赏。
最佳, 丹尼尔
答案 0 :(得分:6)
Nexus 2有一个不再支持的漂亮API。
听起来你指的是这些:
/service/local/artifact/maven/content
/service/local/artifact/maven/redirect
如果您要求找到最新的x.y.z-SNAPSHOT版本,其中x,y,z被猜到 - Nexus从未拥有此功能(仅适用于插件)。
这简直是不真实的 - 请参阅以下文章,该文章清楚地表明您可以指定LATEST,RELEASE或SNAPSHOT基本版本。
这是可能的,但不是一线。
是 - 除非您有一个方便的工具,例如artifact-resolver,它确实使用一行命令来获取工件。
答案 1 :(得分:3)
真是个笑话: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"
答案 2 :(得分:1)
如果您要求x.y.z-SNAPSHOT
,则默认情况下会下载最新的x.y.z-timestamp
快照版本。无需再做任何其他事情
如果您要求查找x.y.z-SNAPSHOT
,x
,y
被猜到的最新z
版本,请Nexus never had this functionality仅适用于插件)。而且我认为没有任何好的用例。如果需要,你可能做错了。您始终应该使用特定版本。实际上,即使是第一个功能,我也无法想到好的用例。
答案 3 :(得分: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"])'
希望有帮助
答案 4 :(得分:1)
自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/download
与repository
,group
和name
参数一起使用。按version
排序将为您提供带时间戳的最新快照。
答案 5 :(得分: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
答案 6 :(得分:0)
这是可能的,但不是1-liner。您需要为之后的每个快照工件获取maven-metadata.xml(请注意,多模块项目对于每个模块(包括父模块)具有不同的时间戳。)
我们使用xlstproc来提取相关变量,因此我们仍然可以从命令行运行,而无需maven或ivy等重量级工具来执行解析。
答案 7 :(得分:0)
我整理了一个时髦的脚本,该脚本可以上传到Nexus,可以通过POST请求解决此特定问题。
您可以在此处找到脚本和一些使用说明:https://github.com/rbjorklin/resolve-latest-nexus-artifact
答案 8 :(得分: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}"
答案 9 :(得分:0)
使用select *,
(case when pax_name like '%'
then substring_index(pax_name, '/', 1)
end) as firstname,
(case when pax_name like '%'
then substring_index(pax_name, '/', -1)
end) as lastname
from o inner join
m
on o.record = m.record
having o.pax_first_name = firstname and
o.pax_last_name = lastname;
,select *,
(case when pax_name like '%'
then substring_index(pax_name, '/', 1)
end) as firstname,
(case when pax_name like '%'
then substring_index(pax_name, '/', -1)
end) as lastname
from o inner join
m
on o.record = m.record
m.pax_name = concat_ws('/', o.pax_first_name, o.pax_last_name);
,curl
和jq
扑打一线:
sort
答案 10 :(得分: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