使用Nexus rest API获取给定groupid / artifactId的最新工件版本

时间:2011-10-27 04:08:42

标签: maven-2 maven nexus

我正在尝试使用nexus REST api来获取最新版本的maven工件。我可以使用http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9浏览到我要查找的特定版本,如果删除版本参数,我可以看到每个版本。但是,当我尝试使用RELEASE或LATEST作为版本时,它返回零结果。 我在nexus中检查了磁盘上的maven-metadata.xml,并且有最新和发布的条目。我需要采取另一个步骤来返回最新版本吗?

我目前正在使用:

Nexus v.1.9.2

6 个答案:

答案 0 :(得分:60)

以下URL将检索最新版本的log4j 1.2.x:

http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST

记录here

更新

使用curl的示例:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar

Log4j2的更新

Log4j 1.2自2015年夏季以来一直是EOL,并且已知在Java 9中被破解。

以下是Log4j工件的链接:

答案 1 :(得分:23)

在Nexus中,LATEST旨在使用 maven插件,而不是使用常规工件。 Nexus根本不保证LATEST在其他情况下工作。如果现在它返回正确版本的工件,明天这可能会停止工作,例如如果您为Nexus存储库运行Rebuild Metadata。您是否希望依赖可能随时中断的机制(例如在发布过程中?)。我怀疑。请阅读this article以获取更多信息。

为了找到LATEST工件版本,您应该编写自己的脚本来调用Search API并根据需要对工件版本进行排序。或者你可以为Nexus编写自己的插件。

或者,如果您的工作流程允许,您可以使用SNAPSHOT而不是发行版本。如果不增加数字部分,则x.y.z-SNAPSHOT将始终返回最新的二进制文件。

最后一点:不要使用最新版本的工件,在绝大多数情况下,如果你有这样的用例,那么你的部署(或者你正在做的任何事情)都有问题。一般来说,你应该知道你将要使用的确切版本。

答案 2 :(得分:15)

此答案已复制自:https://stackoverflow.com/a/39485361/1450799

我有Linux操作系统,但我无法访问REST API,因此我使用以下命令从Nexus获取最新版本的快照:

来自WSO2存储库的maven-metadata.xml示例快照:

$ curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml"
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>org.wso2.is</groupId>
  <artifactId>wso2is</artifactId>
  <versioning>
    <latest>5.3.0-SNAPSHOT</latest>
    <release></release>
    <versions>
      <version>5.1.0-SNAPSHOT</version>
      <version>5.2.0-SNAPSHOT</version>
      <version>5.3.0-SNAPSHOT</version>
    </versions>
    <lastUpdated>20160914062755</lastUpdated>
  </versioning>
</metadata>

从maven-metadata.xml中的最新XML标记中提取:

curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \
grep "<latest>.*</latest>" | \
sed -e "s#\(.*\)\(<latest>\)\(.*\)\(</latest>\)\(.*\)#\3#g"

从maven-metadata.xml中的版本XML标记中提取:

curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \
grep "<version>.*</version>" | \
sort | uniq | tail -n1 | \
sed -e "s#\(.*\)\(<version>\)\(.*\)\(</version>\)\(.*\)#\3#g"

截至2016年9月14日,两项指令的结果均为:

5.3.0-SNAPSHOT

答案 3 :(得分:3)

尝试使用LATEST版本的REST服务后,发现它并不总是有效(参见@Stanislav response)我最终创建了这个用于解析元数据的单行Linux命令。 xml文件:

wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r | head -n 1

只需更改为适当的网址即可,它应该适合您。

干杯

答案 4 :(得分:0)

在最新版本的Nexus API中记录了如何检索组件的最新版本,并按存储库,组,工件和基本版本进行过滤

示例: http:// localhost:8081 / service / rest / v1 / search / assets / download?sort = version&repository = maven-snapshots&maven.groupId = org.foo.bar&maven.artifactId = project&maven.baseVersion = 1.2.3-SNAPSHOT&maven.extension =罐子

参考文档: https://help.sonatype.com/repomanager3/rest-and-integration-api/search-api#SearchAPI-SearchComponents

答案 5 :(得分:0)

对于最新版本的Nexus(自3.16.0起):使用浏览器从maven releases存储库下载最新版本(以zip文件格式存储)的示例:

http://<YourNexusUrl>/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=<yourGroupID>&maven.artifactId=<yourArtifactID>&maven.extension=zip

使用卷曲:

curl -L -X GET "http://<YourNexusUrl>/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=<yourGroupID>&maven.artifactId=<yourArtifactID>&maven.extension=zip" --output myZip.zip