Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sonatype Nexus 3-获取最新快照_Java_Maven_Nexus_Nexus3 - Fatal编程技术网

Java Sonatype Nexus 3-获取最新快照

Java Sonatype Nexus 3-获取最新快照,java,maven,nexus,nexus3,Java,Maven,Nexus,Nexus3,我们刚刚将nexus安装升级到最新版本(3.x)。有没有办法获取给定快照工件的最新版本?Nexus2有一个很好的API,现在已经不受支持了 这里回答了相同的问题(但旧版本除外): 任何想法都将受到高度赞赏 最好的, 丹尼尔这是可能的,但不是一条直线。您需要为要查找的每个快照工件获取maven-metadata.xml(请注意,多模块项目对每个模块(包括父模块)都有不同的时间戳) 我们使用来提取相关变量,因此我们仍然能够从命令行运行,而无需像maven或ivy这样的重量级工具来进行解析。如果您请

我们刚刚将nexus安装升级到最新版本(3.x)。有没有办法获取给定快照工件的最新版本?Nexus2有一个很好的API,现在已经不受支持了

这里回答了相同的问题(但旧版本除外):

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

最好的,
丹尼尔

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


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

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

如果您要求查找最新的
x.y.z-SNAPSHOT
版本,其中猜测
x
y
z
(仅适用于插件)。我不认为这有什么好的用例。如果需要这样做,你可能做错了什么。您应该始终使用特定的版本。实际上,即使是第一个功能,我也无法想出好的用例

Nexus2有一个很好的API,现在已经不受支持了

听起来你指的是这些:

/service/local/artifact/maven/content
/service/local/artifact/maven/redirect
如果你想找到最新的x.y.z-SNAPSHOT版本,其中的x,y,z是猜测的-Nexus从来没有这个功能(它只适用于插件)

这完全是不真实的-请参阅下面的文章,其中清楚地显示了您可以指定最新版本、发行版或快照基础版本


这是可能的,但不是在一个班轮


是的-除非你手边有一个工具,比如它使用一行命令来获取工件。

真是个笑话:Nexus3没有RESTAPI

我找到了一个解决我问题的方法。事实证明ansible有一个很好的模块,它能够以某种方式找出最新的快照。您可以在本地运行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"

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

希望它能有所帮助

我编写了一个groovy脚本,可以上传到Nexus,通过POST请求解决了这个特殊问题


您可以在这里找到脚本和一些使用说明:

您可以使用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}"

使用
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

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

文件在这里

将此端点
/service/rest/v1/search/assets/download
存储库
名称
参数一起使用。按
版本排序
将获得最新的时间戳快照


使用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

就我而言,我没有得到任何回报,因为我缺少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


?看起来这是关于nexus插件的,不是为了通过REST API获取数据,这并没有解释如果不是2.0-snapshot的话如何下载最新快照。给这位先生两杯威士忌!这正好解决了我的使用案例:有一个自动检索最新快照/版本的链接。您还可以使用通配符缩小搜索范围,例如:&version=2.1*(在OSS 3.21.2上测试)感谢您提供的精确答案和示例链接!你太棒了!:)我想回应第一句话,你是最伟大的!这节省了我在尝试构建docker映像以将快照部署到集群中时的时间。非常感谢。