Я хотел бы предоставить простой URL-адрес, который всегда будет возвращать последнюю версию моментального снимка артефакта. Под простым я подразумеваю, что URL-адрес не меняется или требует от пользователя просмотра каталога и проверки временных меток.
Как предоставить доступ по URL-адресу к последнему снимку артефакта в Nexus 2.x?
Ответы (4)
Обратите внимание
- этот ответ относится к Nexus 2.X
- Существует заметное влияние на производительность использования Restlet API для загрузки больших артефактов, см.: https://community.sonatype.com/t/slow-artefacts-download-performance-with-oss-2-x./2280
Базовый «перенаправление» Nexus REST API может быть используется для извлечения любой версии артефакта из указанного репозитория:
Например:
Параметр v может иметь значение, подобное 1.0-SNAPSHOT, и в этом случае Maven вернет последний снимок с отметкой времени, хранящийся в репозитории. Точно так же специальное значение «ПОСЛЕДНЯЯ» должно делать то же самое, если более свежая выпущенная версия отсутствует.
releases
, затем запустил 2.1-SNAPSHOT
, API resolve
и redirect
по-прежнему возвращают артефакт 2.0 с v=LATEST
. когда я использую v=2.1-SAPSHOT
, я получаю ожидаемый результат. Мои параметры: resolve?g=gid&a=artifactName&v=LATEST&r=snapshots&p=jar
, где gid
и artifactName
— ссылки.
- person Brett Ryan; 15.05.2017
Retrieval of /foo/3.3-SNAPSHOT/foo-3.3-SNAPSHOT-jar-with-dependencies.jar from M2Repository(id=central-proxy) is forbidden by repository policy RELEASE.
Есть идеи?
- person Martin Monperrus; 26.03.2020
на моей машине Nexus все результаты для:
вот такие: *-1.2.3-20131204.143026-1.zip
поэтому я не могу получить к нему доступ напрямую, потому что мне нужно предоставить более подробную информацию, которая является динамической.
Пример с "...redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" работает, если я открываю его в браузере, но не когда я его устанавливаю с какой-то Linux-машины, используя:
/usr/share/elasticsearch/bin/plugin --url "http://localhost:8081/nexus/service/local/artifact/maven/redirect?r=snapshots&g=com.comapny.application&a=elasticsearch-river-mongodb&v=1.2.3-SNAPSHOT&p=zip" --install river-mongodb
Итак, мое временное решение использует wget :
wget -O /tmp/elasticsearch-river-mongodb.zip "http://nexushost.domain/nexus/service/local/artifact/maven/redirect?r=snapshots&g=com.comapny.application&a=elasticsearch-river-mongodb&v=1.2.3-SNAPSHOT&p=zip"
затем установите ПОСЛЕДНЮЮ версию из локального файла.
Если вы ищете последнюю версию моментального снимка, просто попросив, скажем, «1.0-SNAPSHOT», вы получите последнюю версию моментального снимка этого артефакта.
Однако, если вы ищете «последнюю версию», синтаксис «v=LATEST» будет работать, но имейте в виду, что это ключевое слово может возвращать последнюю версию того снимка, который вы ищете, или только что завершенный выпуск, или эта ДРУГАЯ ветвь того же артефакта, которая является версией впереди и все еще находится в «-SNAPSHOT».
Если вы ищете самую последнюю версию, тогда да, используйте "v=LATEST". Если вы ищете последнюю версию, вы также можете запросить "v=RELEASE". Если у вас есть группа репозиториев, вы можете ссылаться как на репозитории моментальных снимков, так и на репозитории выпусков, добавив к URL-адресу что-то вроде:
"...v=RELEASE&r=public"
Это должно выполнять поиск по всем вашим «сгруппированным» репозиториям.
Каждый репозиторий имеет свой собственный URL-адрес (вы можете увидеть его в браузере репозитория). Если вы откроете его, вы сможете просмотреть идентификаторы групп и артефактов до своего артефакта. Это ваш URL-адрес, например, такой: http://nexushost.domain/content/repositories/snapshots/com/example/group/artifact/1.2.3-SNAPSHOT/1.2.3-SNAPSHOT.jar