Sonatype Nexus REST Api获取最新构建版本

20
我能用 Sonatype REST API 获取具有最高版本(最新时间版本)的构建吗?
http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION

将构建版本作为ARTIFACT_VERSION传递是有效的。 传递v=LATESTv=latest不会返回最新的构建。


5个回答

30

并没有文档记录 /service/local/lucene/search 支持 "LATEST" 作为版本参数 [链接]

OSS rest api 文档说明 /service/local/artifact/maven [链接](获取 artifact 的 pom 文件)和 /service/local/artifact/maven/content [链接](获取实际文件内容)支持它:

Artifact 版本(必需)支持解析 "LATEST"、"RELEASE" 和快照版本("1.0-SNAPSHOT")。

因此,我认为您应该使用其中之一(您还需要提供 repositoryId 和 groupId),例如:

http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST

您可以像Steinim建议的那样使用&e=war或&e=jar(顺便说一句,他的解决方案对我不起作用)。 - moshe beeri
2
使用时请注意:如果在元数据中将最新版本设置为固定值(在Sonatype Nexus上,当点击“重建元数据”时会发生这种情况),您可能会获得旧版本的构件而不是最新版本,如此文章所述:http://articles.javatalks.ru/articles/32 - Giuseppe
如果你的构件不是一个jar包,那么请添加e参数,例如:http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST&e=zip - schnatterer
确实它不适用于Nexus 3。你有其他的解决方案吗? - Mohamed Thoufeeque
那个解决方案对我不起作用。我尝试了这个命令,我有一个应该匹配的构件:curl -u admin:admin123 -L "http://127.0.0.1:8081/nexus/service/local/artifact/maven/content?r=maven-group&g=xml-apis&a=art&v=LATEST" 但是我得到了一个404错误... - FranAguiar

18

我曾经遇到过同样的问题,并使用lucene搜索API解决了它:

if [[ "${REPO}" == "snapshots" ]]; then
  version=$( curl --silent "http://${HOST}/nexus/service/local/lucene/search?g=${GROUP_ID}&a=${ARTIFACT}" | sed -n 's|<latestSnapshot>\(.*\)</latestSnapshot>|\1|p' | sed -e 's/^[ \t]*//' | tail -1 )
else
  version=$( curl --silent "http://${HOST}/nexus/service/local/lucene/search?g=${GROUP_ID}&a=${ARTIFACT}" | sed -n 's|<latestRelease>\(.*\)</latestRelease>|\1|p' | sed -e 's/^[ \t]*//' | tail -1 )
fi

curl -o ~/${ARTIFACT}-${VERSION}.zip -L -#  "http://${HOST}/nexus/service/local/artifact/maven/redirect?r=${REPO}&g=${GROUP_ID}&a=${ARTIFACT}&e=zip&v=${VERSION}"

5
我有一个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

我建议使用带有--xpath标志的xmllint,而不是grep。 - him

4

Lucene搜索API还可以针对版本进行关键词搜索:

http://<nexus_repository>/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=1.0.*

2
尝试使用“最新”版本的REST服务后(并发现它不总是有效),我最终创建了这个一行式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

我建议使用带有 --xpath 标志的 xmllint,而不是使用 grep。 - him

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接