Sonatype Nexus REST Api получает последнюю версию сборки

Как я могу использовать Sonatype REST Api для получения сборки с самой высокой версией (последняя временная сборка)?

http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION

Передача версии сборки как ARTIFACT_VERSION работает. Передача v=LATEST или v=latest НЕ возвращает последнюю сборку.


person Giorgio    schedule 09.02.2013    source источник


Ответы (5)


Не задокументировано, что /service/local/lucene/search поддерживает «ПОСЛЕДНЮЮ» в качестве параметра версии [ссылка] В документации OSS rest API указано, что /service/local/artifact/maven [ссылка] (чтобы получить pom-файл артефакта) и /service/local/artifact/maven/content [ссылка ] (чтобы получить фактическое содержимое файла) поддерживает его:

Версия артефакта (обязательно) Поддерживает разрешение «ПОСЛЕДНЕЙ», «РЕЛИЗНОЙ» версии и версии моментального снимка («1.0-SNAPSHOT»).

Поэтому я думаю, что вы должны использовать один из них (вам также нужно будет предоставить им репозиторийId и groupId), например:

http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST
person Ido.Co    schedule 10.02.2013
comment
вы можете использовать &e=war или &e=jar, как steinim, предложенный ниже (кстати, его решение не работает для меня) - person moshe beeri; 25.03.2014
comment
Будьте осторожны при использовании этого: если для последней версии было установлено фиксированное значение в метаданных (в Sonatype Nexus это происходит при нажатии Rebuild metadata), вы можете получить старую версию своего артефакта вместо последней, как описано здесь : articles.javatalks.ru/articles/32 - person Giuseppe; 06.02.2017
comment
Если ваш артефакт не jar, добавьте параметр e, например: http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST&e=zip - person schnatterer; 20.02.2017
comment
Действительно, это не работает для Nexus 3. У вас есть другое решение? - person Mohamed Thoufeeque; 16.10.2017
comment
Это решение не работает для меня. Я пытаюсь это сделать, и у меня есть артефакт, который должен соответствовать: 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... - person FranAguiar; 15.11.2017

У меня была такая же проблема, и я решил ее так, используя API поиска lucene:

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}"
person Stein Inge Morisbak    schedule 08.05.2013

Поисковый API Lucene также позволяет искать версию по ключевым словам:

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

У меня ОС 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
person Reza Rahimi    schedule 14.09.2016
comment
вместо grep я бы рекомендовал xmllint с флагом --xpath - person him; 16.05.2020

Попробовав службу REST с версией LATEST (и обнаружив, что это не всегда работает), я в итоге создал эту: Команда liner 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
person idelvall    schedule 02.11.2016
comment
вместо grep я бы рекомендовал xmllint с флагом --xpath - person him; 16.05.2020