Sonatype Nexus REST Api извлекает последнюю версию сборки
Как я могу использовать RAD Api сонатипа для получения сборки с самой высокой версией (последняя временная сборка)?
http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION
Выполняется выполнение версии сборки ARTIFACT_VERSION
. Передача v=LATEST
или v=LATEST
НЕ возвращает последнюю сборку.
Ответы
Ответ 1
Не указано, что /service/local/lucene/search поддерживают "LATEST" как параметр версии [ссылка]
В документации api rest api указано, что /service/local/artifact/maven
[ссылка] (для получения файла архива артефакта) и /service/local/artifact/maven/content
[ссылка] (для получения фактического содержимого файла) поддерживает его:
Версия артефакта (обязательно) Поддерживает разрешение "LATEST", "RELEASE" и моментальные снимки ( "1.0-SNAPSHOT" ).
Итак, я думаю, вы должны использовать один из них (вам также придется предоставить их также с repositoryId и groupId)
например:
http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST
Ответ 2
У меня была такая же проблема, и я решил это сделать с помощью поиска 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}"
Ответ 3
API поиска Lucene также позволяет выполнять поиск по ключевым словам для версии:
http://<nexus_repository>/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=1.0.*
Ответ 4
У меня есть ОС Linux, и у меня нет доступа к REST API, поэтому я использовал следующие команды, чтобы получить последнюю версию моментальных снимков от Nexus:
Пример моментальных снимков maven-metadata.xml из репозитория WSO2:
$ 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>
Извлечение из последнего XML-тега внутри maven-metadata.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"
Извлечение из тега XML версии внутри maven-metadata.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"
Результат обеих команд до сегодняшнего дня 14 сентября 2016 года:
5.3.0-SNAPSHOT
Ответ 5
После попытки службы REST с версией LATEST
(и обнаружением она не всегда работает), я закончил создание этой однолинейной команды 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