Как программно обновить файл метаданных 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
Другие вопросы по тегам