如何使用 Sonatype REST Api 获取具有最高版本的构建(最新的临时构建)?
http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION
传递构建版本作为ARTIFACT_VERSION
作品。通过v=LATEST
或v=latest
不返回最新版本。
如何使用 Sonatype REST Api 获取具有最高版本的构建(最新的临时构建)?
http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION
传递构建版本作为ARTIFACT_VERSION
作品。通过v=LATEST
或v=latest
不返回最新版本。
没有记录 /service/local/lucene/search 支持“LATEST”作为版本参数 [ link ] OSS rest api 文档指出/service/local/artifact/maven
[ link ](获取工件 pom 文件)和/service/local/artifact/maven/content
[ link ](获取实际文件内容)确实支持它:
工件的版本(必需)也支持解析“LATEST”、“RELEASE”和快照版本(“1.0-SNAPSHOT”)。
因此,我认为您应该使用其中之一(您还必须为它们提供 repositoryId 和 groupId),例如:
http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST
我遇到了同样的问题,并使用 lucene search 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}"
Lucene 搜索 API 还允许关键字搜索版本:
http://<nexus_repository>/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=1.0.*
我有 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
在尝试使用该LATEST
版本的 REST 服务(并发现它并不总是有效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