Почему я получаю 400 при попытке использовать публиковать плагин из плагина Grails Release
Я использую Grails 2.4.1 и плагин Grails Release версии 3.0.1.
У меня есть установка репозитория Sonatype Nexus (v2.3.1-01), которая используется в нескольких других проектах без проблем.
Я пытаюсь создать новый плагин, который я хочу распространять через репозиторий SNAPSHOT в Nexus (и позже через наш репозиторий Releases).
В моем файле ${projectName}GrailsPlugin.groovy у меня есть:
def groupId ="my-department-grails-plugins"
def version = "0.1-SNAPSHOT"
В моем файле application.properties у меня есть:
app.name=MyPluginNameForGrails
В моем BuildConfig.groovy у меня есть:
grails.project.repos.newsnapshots.url = "http://internal.server.address/nexus/service/local/repositories/snapshots"
grails.project.repos.newsnapshots.username = "username"
grails.project.repos.newsnapshots.password = "password"
Я пытаюсь начать с помощью следующей команды:
плагин публикации --snapshot --repository=newsnapshots --stacktrace
Успешная сборка все выглядит хорошо, пока не попытается войти в нексус, и я получу:
Использование настроенного имени пользователя и пароля из grails.project.repos.newsnapshots .... Ошибка | Не удалось опубликовать плагин: Ошибка при развертывании артефакта 'ald-grails-plugins:my-plugin-name-for-grails:zip': Ошибка при развертывании артефакта: Не удалось передать файл: http://internal.server.address/nexus/content/groups/public/my-department-grails-plugins/my-plugin-name-for-grails/0.1-SNAPSHOT/my-plugin-name-for-grails-0.1-20140815.191240-1.zip. Код возврата: 400
Я нашел связанный вопрос Stackru, который кажется связанным, но ни одно из условий, которые они описывают как вызывающие 400, не существует.
Я также нашел статью Sonatype Nexus, в которой описываются возможные причины 400-х годов, и, похоже, это тоже не так.
Если вы заметили репозиторий, на который я указываю, он находится непосредственно в репозитории, но затем в сообщении об ошибке указывается путь к группе. Я думаю, что это может быть как-то связано, но, если это так... Я не уверен, как это исправить, так как кажется, что это происходит как-то внутренне в плагине Releases.
Я также должен добавить, что я удалил -SNAPSHOT из файла GrailsPlugin.groovy и изменил целевой репозиторий на наш репозиторий RELEASES с точно таким же результатом.
2 ответа
Моя проблема была из-за зеркала, определенного в моем файле.m2/settings.xml (спасибо Jeff Beck за комментарий, который привел к решению!). Это вызывало перенаправление POST в хранилище в общедоступную ГРУППУ, которая не позволяла загружать артефакт.
Есть несколько других вторичных причин, которые способствовали моим проблемам с устранением неполадок:
- При загрузке в репозиторий SNAPSHOT номер вашей версии должен соответствовать шаблону x-SNAPSHOT, где x может быть чем угодно (?).
- Вы не можете загружать в репозиторий SNAPSHOT при использовании Nexus ReST API. Это на самом деле не повлияло на мое конкретное решение, но стоит отметить, что другие могут столкнуться с этой проблемой.
- При загрузке в репозиторий NON-SNAPSHOT номер вашей версии НЕ ДОЛЖЕН соответствовать шаблону x-SNAPSHOT.
Учитывая настройку зеркала в каталоге.m2, плагин Grails Release будет иметь проблемы при попытке развернуть, если зеркала совпадает с тем местом, куда вы развертываете. Вы можете удалить настройку зеркала или изменить ее, чтобы она не соответствовала вашему целевому репо. Проверьте эти jiras для получения дополнительной информации: