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

chr*_*sst 40 maven-2 nexus maven

我正在尝试使用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

Mar*_*nor 66

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

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

记录在这里

更新

使用curl的示例:

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

Log4j2的更新

Log4j 1.2自2015年夏季开始就是EOL,并且已知在Java 9中被破解.

以下是Log4j工件的链接:

  • @DeanWild添加`&p = aar` (2认同)
  • 我无法在公司内部的Nexus上使用它。如何确定您提供的链接和系统中需要的链接之间的区别?我只有HTTP 404,仅此而已。 (2认同)

Sta*_*sev 23

在Nexus中,LATEST旨在使用maven插件而不是常规工件.Nexus根本不保证LATEST在其他情况下工作.如果现在它返回正确版本的工件,明天这可能会停止工作,例如,如果您运行Nexus存储库的重建元数据.您是否希望依赖可能随时中断的机制(例如在发布过程中?).我怀疑.阅读本文以获得更多见解.

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

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

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


Rez*_*imi 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>
Run Code Online (Sandbox Code Playgroud)

从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"
Run Code Online (Sandbox Code Playgroud)

从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 --version-sort | uniq | tail -n1 | \
sed -e "s#\(.*\)\(<version>\)\(.*\)\(</version>\)\(.*\)#\3#g"
Run Code Online (Sandbox Code Playgroud)

截至2016年9月14日,这两个命令的结果是:

5.3.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

  • 我知道Stackoverflow中有一个徽章,通过给一个帖子投反对票来达到.出于这个原因,许多人搜索并投票否定他们无法动摇并获得徽章的第一件事:) (2认同)
  • 与Nexus 3搭配使用时效果很好。我想补充一下:`sort --version-sort`可以更好地工作:它将1.0.9、1.0.10、1.0.11视为正确的顺序,而不是字母顺序,即默认值(1.0.10、1.0.11、1.0.9) (2认同)

ide*_*all 5

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

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
Run Code Online (Sandbox Code Playgroud)

只需将 更改为适当的 url,它应该适合您。

干杯


小智 5

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

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

Run Code Online (Sandbox Code Playgroud)

使用卷曲:

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

Run Code Online (Sandbox Code Playgroud)