Использование Nexus rest API для получения последней версии артефакта для заданного groupid / artifactId - PullRequest
39 голосов
/ 27 октября 2011

Я пытаюсь использовать nexus REST 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 в качестве версии, он возвращает ноль результатов. Я проверил maven-metadata.xml на диске в Nexus, и там есть записи для последнего и выпуска. Есть ли еще один шаг, который мне нужно сделать, чтобы вернуть последнюю версию?

Я сейчас использую:

Nexus v. 1.9.2

Ответы [ 4 ]

64 голосов
/ 28 октября 2011

Следующий URL-адрес извлечет последнюю версию log4j 1.2.x:

http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST

Документировано здесь

Обновление

Пример использования curl:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar

Обновление для Log4j2

Log4j 1.2 является EOL с лета 2015 года и, как известно, не работает в Java 9.

Вот ссылка на артефакты Log4j:

23 голосов
/ 20 сентября 2014

В Nexus LATEST предназначен для работы с плагинами maven , а не с обычными артефактами.Nexus просто не гарантирует, что последние будут работать в других случаях.Если прямо сейчас он вернет вам правильную версию артефакта, завтра это может перестать работать, например, если вы запустите Rebuild Metadata для хранилища Nexus.Вы хотите положиться на механизм, который может сломаться в любой момент (например, в процессе выпуска?).Я сомневаюсь.Прочитайте эту статью для получения дополнительной информации.

Чтобы найти ПОСЛЕДНЮЮ версию артефакта, вы должны либо написать свой собственный скрипт для вызова API поиска и отсортировать версии артефактов, как вам нужно.Или вы можете написать свой собственный плагин для Nexus.

В качестве альтернативы, если ваш рабочий процесс позволяет это, вы можете использовать SNAPSHOT вместо версий выпуска.Если вы не увеличиваете числовую часть, то x.y.z-SNAPSHOT всегда будет возвращать последний двоичный файл.

Последний пункт: не используйте последние версии артефактов, в подавляющем большинстве случаев, если у вас есть такой вариант использования, тогда что-то не так с вашими развертываниями (или что вы делаете).В общем, вы должны знать точную версию, которую собираетесь использовать.

15 голосов
/ 14 сентября 2016

Этот ответ был скопирован с: https://stackoverflow.com/a/39485361/1450799

У меня ОС 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
3 голосов
/ 02 ноября 2016

Попробовав службу REST с версией LATEST и обнаружив, что она не всегда работает (см. @ Ответ Станислава ), я в итоге создал эту однострочную команду Linux для анализа метаданных.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

Просто измените на соответствующий URL-адрес, и он должен работать для вас.

Приветствия

...