Ошибка при развертывании артефакта в Nexus

102

Я получаю сообщение об ошибке при развертывании артефакта в моем собственном репозитории на сервере Nexus: «Не удалось развернуть артефакты: не удалось передать артефакт» «Не удалось передать файл http: /// my_artifact. Код возврата: 400»

У меня Nexus работает с одним настраиваемым репозиторием my_repo со следующей локальной конфигурацией maven:

settings.xml

<server>
    <id>my_repo</id>
    <username>user</username>
    <password>pass</password>
 </server>
 ...
 <mirror>
    <id>my_repo</id>
    <name>Repo Mirror</name>
    <url><my_url_to_my_repo></url>
    <mirrorOf>*</mirrorOf>
  </mirror>
  • у пользователя есть права на создание / чтение / запись в my_repo -

pom.xml

<distributionManagement>
        <repository>
            <id>my_repo</id>
            <name>my_repo</name>
            <url><my_url_to_my_repo></url>
            <layout>default</layout>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url><my_url_to_my_snapshot_repo></url>
        </snapshotRepository>
    </distributionManagement>

а затем я выполняю

mvn deploy

и получите ошибку. Любая идея?

ацимутальный
источник
2
HTTP 400 означает «неверный запрос». Я предполагаю, что один из URL-адресов неверен.
Марк О'Коннор,
для меня проблема заключалась в том, что это не была версия моментального снимка.
maveroid

Ответы:

156

Я могу придумать пару вещей:

  • учетные данные пользователя неверны
  • URL-адрес сервера неправильный
  • у пользователя нет доступа к репозиторию развертывания
  • пользователь не имеет доступа к конкретной цели репозитория
  • артефакт уже развернут с этой версией, если это выпуск (не версия -SNAPSHOT)
  • репозиторий не подходит для развертывания соответствующего артефакта (например, репозиторий выпуска для версии моментального снимка, репозиторий прокси или группа вместо размещенного репозитория)

Проверьте их, и если у вас все еще возникнут проблемы, укажите здесь более подробную информацию.

Манфред Мозер
источник
44
Я изменил версию своего артефакта на SNAPSHOT, а затем развернул, и все было в порядке. Затем я понял, что пытаюсь выполнить развертывание в группе Nexus (а не в репозитории Nexus), поэтому причиной моей проблемы было: «URL-адрес моего репозитория nexus был неправильным»
acimutal
5
ВАЖНО: «артефакт уже развернут с этой версией, если это релиз (не версия -SNAPSHOT)»
Бхушан
1
Спас мой день ... Я удалил слово -SNAPSHOT из версии в pom.xml, поэтому его невозможно развернуть на нексусе ... Я добавил слово SNAPSHOT обратно, и оно сработало ..
venugopal
3
По моему опыту, неправильные учетные данные приводят к 401, а не 400. Добавление суффикса имени версии с помощью «-SNAPSHOT» устранило проблему для меня.
Марк Юний Брут
1
вы можете просто изменить политику развертывания вашего репозитория, чтобы разрешить
Furqan
35

Просто чтобы создать отдельный ответ. Ответ фактически находится в комментарии к принятому ответу.

Попробуйте изменить версию вашего артефакта, чтобы закончить -SNAPSHOT.

бхагьи
источник
2
Нет, вы упускаете из виду весь смысл, внимательно прочтите комментарий, в котором упоминается «поэтому причина моей проблемы заключалась в следующем:« URL-адрес моего репозитория nexus был неправильным »». И получите некоторое представление о том, что означает «Код возврата: 400» (прежде чем вы просто скопируете чьи-то комментарии в качестве ответа)
Кухаджеян
13
Просто хотел прокомментировать здесь, так как я попал на эту страницу в моем поиске. Я столкнулся с той же ошибкой 400, и то, что здесь сказали бхагьи, является ключевым (хотя я не осознавал этого в то время), при развертывании в репозиторий моментальных снимков версия ДОЛЖНА заканчиваться на -SNAPSHOT. Моя версия была 1.13.0.SNAPSHOT, и мне потребовался час, чтобы понять, что она должна быть 1.13.0-SNAPSHOT.
Крейг,
16

400 Bad Request будет возвращен, если вы попытаетесь:

  1. Разверните артефакт (или версию) моментального снимка, оканчивающийся на -SNAPSHOT, в выпуск репозиторий
  2. Развернуть артефакт выпуска (версия, не оканчивающаяся на -SNAPSHOT ) в моментальный снимок репозиторий
  3. Развернуть одну и ту же версию артефакта выпуска более одного раза в репозиторий выпуска
Родж
источник
12

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

ankitkpd
источник
7

Сегодня у меня была именно эта проблема, и проблема заключалась в том, что версия, которую я пытался выпустить: perform, уже была в репозитории Nexus.

В моем случае это, вероятно, было из-за отключения сети во время более раннего вызова release: perform. Несмотря на то, что я потерял соединение, похоже, что релиз прошел успешно.

эйдолон1138
источник
7

В том редком случае, когда вам нужно повторно развернуть ТАКЖЕ СТАБИЛЬНЫЙ артефакт на Nexus, по умолчанию произойдет сбой. Если затем вы удалите артефакт из Nexus (через веб-интерфейс) с целью его повторного развертывания, развертывание все равно не удастся, поскольку простое удаление, например, jar или pom не очищает другие файлы, все еще лежащие в каталоге. Вам необходимо войти в систему и полностью удалить каталог.

босвос
источник
2
Чтобы добавить к этому, если у вас нет интерактивного доступа к серверу (я не знаю - это управляемый блок), вы можете удалить ошибочный артефакт с помощью HTTP DELETE. Я использую PostMan для этой цели
Натан Рассел
Я не уверен, что это потому, что я использую плагин S3 blobstore, но я не вижу структуры каталогов, соответствующей структуре репо. Есть ли какой-нибудь трюк, чтобы определить, какие каталоги нужно удалить? Все мои файлы названы с хешем. content/vol-{01-43}/chap-{01-47}
Каталоги
Вы также можете удалить все файлы для выпуска, перейдя в каталог выпуска из репозитория, вместо того, чтобы искать артефакт при поиске типа GAV. В представлении репозитория вы можете щелкнуть правой кнопкой мыши каталог, чтобы получить действие удаления для всех файлов в этом GAV.
Кристиан Тримбл
3

Сегодня у меня была такая же проблема с добавлением «Код возврата: 400, ReasonPhrase: неверный запрос». который оказался "артефакт уже развернут с этой версией, если это проблема выпуска" из ответа выше введите описание ссылки здесь

Одно из еще не упомянутых решений - настроить Nexus для повторного развертывания в репозиторий Release. Возможно, это не лучшая практика, потому что это установлено по какой-то причине, вы, тем не менее, можете перейти в «Настройки доступа» на вкладке «Конфигурация» репозиториев Nexus и установить для «Политики развертывания» значение «Разрешить повторное развертывание».

jonashackt
источник
3
  • в родительском приложении pom ==> Version поместите тег следующим образом: xxx-SNAPSHOT

пример: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": очень важно
Фадид
источник
2

Убедитесь, что в нексусе (как выпуск) еще не существует (артефакт и версия). В этом случае верните неверный запрос.

Данипенаперез
источник
2

Для ошибки 400 проверьте репозиторий «Политика развертывания», обычно это «Отключить повторное развертывание». В большинстве случаев версия вашей библиотеки уже существует, поэтому вы получаете сообщение «Не удалось PUT put ' https: //yoururl/some.jar '. Получен код состояния 400 с сервера: Репозиторий не позволяет обновлять активы:» ваш имя репозитория "

Итак, у вас есть несколько вариантов решения этой проблемы. 1- разрешить повторное развертывание 2- удалить версию из репозитория, которую вы пытаетесь загрузить 3- изменить номер версии

Фуркан
источник
Разрешение повторного развертывания репозитория релизов обычно не считается хорошей практикой. Не делайте этого без рассмотрения.
Итайпк
1
@Itaypk, вы правы, поэтому я предложил еще несколько предложений. На мой взгляд, лучше поменять версию.
Furqan
1

Если какой-либо из приведенных выше ответов сработал, вы можете создать новый артефакт прямо со стороны администратора (снимок экрана NEXUS прилагается ниже).

  1. Login to nexusUI http: // ВАШ_URL: 8081 / nexus (имя пользователя: пароль администратора по умолчанию: admin123 )
  2. Click repositories с левой стороны, затем щелкните репо, например: нажмите кнопку «Выпуск».
  3. Выберите artifact Upload(последняя вкладка).
  4. Выберите GAV definitionкак GAV Param- Затем введите свой групповой идентификатор, идентификатор артефакта и версию.
  5. Выберите файл Jar.
  6. Щелкните загрузить артефакт. Это оно !

Теперь вы сможете добавить соответствующий объект в свой проект (снимок экрана ниже)

введите описание изображения здесь

vipin cp
источник
1

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

Я попробовал позже с версией 2 и успешно развернул ее.

Сообщение об ошибке определенно не поможет:

Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases-xxx. -> [Help 1]

Лучшее сообщение могло быть version 2.0.1 violates naming policy

старый монах
источник
0

Идентификатор сервера должен совпадать с идентификатором репозитория maven settings.xml

Рави Петчимуту
источник