Как программно обновить файл метаданных maven в нексусе
Я хочу обновить файл maven-metadata.xml на моем сервере Nexus программным способом. Есть ли способ, которым я могу сделать это? Могу ли я использовать eclipse aether API для этого?
3 ответа
Файлы метаданных maven поддерживаются Maven. Nexus обновляет их при удалении и имеет запланированное задание, которое также может исправить файлы.
Однако в зависимости от способа удаления файлов метаданные могут не обновляться. Например, если вы просто удалите файлы в хранилище и не используете приложение Nexus.
Я знаю, что это старый вопрос, но я наткнулся на него с той же проблемой и подумал, что поделюсь своим решением для следующего человека на моем месте. У нас есть приложение, в котором мы загружаем артефакты в репозиторий Nexus с помощью REST API, и это не создает правильные файлы maven-metadata.xml. Например, для com/test/artifact версии 2.0.0 создается com/test/artifact/2.0.0/maven-metadata.xml, но не com/test/artifact/maven-metadata.xml. В Nexus есть задача «Восстановить — восстановить метаданные репозитория Maven», которая будет делать то, что вы хотите. К сожалению, нет REST API для создания задач, только для перечисления и запуска. Я отслеживал сетевой трафик при создании этой задачи в веб-интерфейсе и придумал это решение в виде фрагмента bash:
# create the task
response=$(curl \
--silent \
--fail \
--user $NEXUS_USERNAME:$NEXUS_PASSWORD \
--header "Content-Type: application/json" \
--data '{"action":"coreui_Task","method":"create","data":[{"id":"NX.coreui.model.Task-1","typeId":"repository.maven.rebuild-metadata","enabled":true,"name":"rebuild maven metadata","alertEmail":"","notificationCondition":"FAILURE","schedule":"manual","properties":{"repositoryName":"maven-hosted","groupId":"","artifactId":"","baseVersion":"","rebuildChecksums":"false"},"recurringDays":[],"startDate":null,"timeZoneOffset":"+00:00"}],"type":"rpc","tid":0}' \
http://$NEXUS_SERVER/service/extdirect)
if [ $? -eq 0 ]; then
taskid=$(echo $response | jq -r .result.data.id)
if [[ "$taskid" != "null" ]]; then
# run the task
curl \
--silent \
--user $NEXUS_USERNAME:$NEXUS_PASSWORD \
--header 'accept: application/json' \
--header "Content-Type: application/json" \
--request 'POST' \
--data '' \
http://$NEXUS_SERVER/service/rest/v1/tasks/${taskid}/run
fi
fi
Мы используем Nexus OSS 3.41.
Используйте вызов Nexus restAPI, чтобы восстановить метаданные Nexus после развертывания, DELETE
просьба к /service/local/metadata/repositories/<repo-id>/content
.
Например:
curl -v -u userID:password -X DELETE http://localhost:8081/nexus/service/local/metadata/repositories/snapshots/content/com/foo/some/artifact