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

Я пытаюсь использовать REST api nexus для получения последней версии артефакта 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

Ответ 1

Следующий 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:

Ответ 2

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

Чтобы найти последнюю версию артефакта, вы должны либо написать свой собственный script, чтобы вызывать API поиска и сортировать артефактные версии по своему усмотрению. Или вы можете написать свой собственный плагин для Nexus.

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

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

Ответ 3

Этот ответ был скопирован с: fooobar.com/questions/163950/...

У меня ОС 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 --version-sort | uniq | tail -n1 | \
sed -e "s#\(.*\)\(<version>\)\(.*\)\(</version>\)\(.*\)#\3#g"

Результат обеих команд до сегодняшнего дня 14 сентября 2016 года:

5.3.0-SNAPSHOT

Ответ 4

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

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

Приветствия