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

n9vozmp4  于 2023-08-03  发布在  Maven
关注(0)|答案(7)|浏览(155)

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

5hcedyr0

5hcedyr01#

以下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

字符串

Log4j 2更新

Log4j 1.2从2015年夏天开始停产,已知在Java 9中被破坏。
下面是Log4j工件的链接:

crcmnpdw

crcmnpdw2#

在Nexus中,LATEST的设计是为了与 *maven插件 * 一起工作,而不是与常规工件一起工作。Nexus只是不保证最新的工作在其他情况下。如果现在它返回工件的正确版本,明天它可能会停止工作,例如。如果您为Nexus存储库运行“重建元数据”。您是否希望依靠随时可能断裂的机制(例如在发行过程中?).我怀疑。阅读this article获得更多的洞察力。
为了找到最新的工件版本,您应该编写自己的脚本来调用Search API,并根据需要对工件版本进行排序。或者你可以写你自己的插件为Nexus。
或者,如果您的工作流程允许,您可以使用SNAPSHOT,而非出版版本。如果不递增数字部分,则x.y.z-SNAPSHOT将始终返回最新的二进制。
最后一点:不要使用最新版本的工件,在大多数情况下,如果您有这样的用例,那么您的部署(或您正在做的任何事情)都有问题。一般来说,您应该知道要使用的确切版本。

fhity93d

fhity93d3#

此答案已复制自:https://stackoverflow.com/a/39485361/1450799
我使用Linux操作系统,无法访问REST API,因此我使用以下命令从Nexus获取最新版本的快照:
WSO 2存储库中的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中的version 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"


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

5.3.0-SNAPSHOT

icomxhvb

icomxhvb4#

在尝试使用LATEST版本的REST服务后,发现它并不总是工作(参见@Stanislav response),我最终创建了这个单行Linux命令来解析metadata.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

字符串
只需将其更改为合适的网址,它就能为您服务。
干杯

3npbholx

3npbholx5#

对于最新版本的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:

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

b1payxdu

b1payxdu6#

在Nexus API的最新版本中,记录了检索组件最新版本的方法,通过存储库、组、工件和基本版本进行筛选
示例:http://localhost:8081/service/rest/v1/search/assets/download?sort=version&repository= maven-snapshot &maven.groupId= org.foo.bar &maven.artifactId=project&maven.baseVersion=1.2.3-SNAPSHOT&maven.extension=jar
参考文件:https://help.sonatype.com/repomanager3/rest-and-integration-api/search-api#SearchAPI-SearchComponents

4urapxun

4urapxun7#

另一种使用“jq”从Nexus下载最新工件的方法

artifact_url="https://<nexus url>/service/rest/v1/search/assets?group=<group name>&name=<artifact_name>&maven.baseVersion=<artifact_base_version>&maven.extension=zip"

# Get data of the latest artifact
artifact_data=$(curl -s "${artifact_url}" | jq '.items |= sort_by(.lastModified)' | jq '.items[-1]' --raw-output)

# Get the download Url of the artifact
artifact_download_url=$(echo "${artifact_data}" | jq '.downloadUrl' --raw-output)

# Downloads
curl --create-dirs -LsSf -o "./artifacts/<artifact name>.zip" "${artifact_download_url}"

字符串

相关问题