2012-06-24 4 views
10

Я строю проект, который состоит из нескольких (иногда несвязанных) модулей и еще нескольких нестандартных java-модулей (построенных с ANT).Maven deploy: принудительное развертывание, даже если артефакт уже существует

Каждый модуль maven развертывается в хранилище релизов по завершении.

Если сборка завершается неудачно в середине, у меня могут быть установлены некоторые модули, поэтому, если я попытаюсь перестроить, новая попытка развертывания завершится с ошибкой, так как артефакты уже развернуты.

Можно ли принудительно развертывать или вместо этого удалять развернутый артефакт до повторного развертывания?

+0

try mvn release: rollback – om39a

+0

Зачем нужно развертывание? Если вы разворачиваете артефакт с той же версией, он просто перезапишет существующий. –

+3

Andrew - AFAIK, если вы попытаетесь повторно развернуть существующий артефакт, вы потерпите неудачу. –

ответ

8

Похоже, что администраторы промежуточного программного обеспечения настроили ваш экземпляр удаленного репо (Nexus или Artifactory или что-то еще), чтобы не допускать перераспределения артефакта, и, как поясняет @khmarbaise, для этого есть веские причины. Nexus может быть сконфигурирован так, чтобы разрешить удаление артефактов пользователями в определенной роли или с привилегиями удаления артефактов. Если ваши администраторы настроены таким образом, возможно, вы можете запросить привилегию удаления и удалить повреждающие артефакты. Или, возможно, администратор Nexus согласится сделать это за вас.

Если ни один из них можно, вот некоторые вещи, чтобы попробовать, которые могли бы препятствовать этому случаться в будущем:

  1. Если вы используете release плагин, сделать сухой прогон (-DdryRun=true на выпуске : подготовить командную строку). Maven должен сообщать о любых ошибках, не передавая SCM.
  2. Попробуйте запустить mvn install в вашей группе проектов. Это установит артефакты в локальное репо, а не на удаленный. Если есть проблема, вы можете ударить артефакты из своего локального репо и начать с нуля, повторяя, пока не получите полную сборку.
  3. Если вы используете многомодульную сборку, есть command line options, которые позволяют возобновить сборку Maven из определенного проекта вперед.
  4. Определить -Dmaven.deploy.skip=true в командной строке Maven. Это похоже на предложение №2, за исключением того, что Maven фактически загрузит &, сконфигурировав deploy plugin, он просто не выполнит фактическое развертывание на удаленном репо. Как только все будет работать, удалите свойство пропуска.
+0

Все хорошие предложения. Думаю, я поеду на вариант 4 или похожий ... Thx! –

+0

У меня есть аналогичная проблема, все прошло нормально, пока я не получил 502 (прокси-ошибка). Я полагаю, что мой uni-сервер считал, что мое соединение является угрозой. Теперь я получаю 400 (Bad Request), потому что артефакты уже находятся на сервере nexus. Есть ли способ возобновить выпуск: выполнить? Я могу удалить артефакты, но это большая работа в панели управления nexus. Кажется, мне нужно удалить каждую подпапку каждой версии мультимодульного проекта вручную. Тем не менее, я попытаюсь загрузить из сети uni в следующий раз! – DarthB

2

Возможные варианты были увеличены;)

Используйте параметр deployAtEnd (Более подробная информация: here). С помощью этого параметра артефакты развертываются только, если все артефакты были успешно построены.

4

Я знаю, что может быть поздно, но в Nexus есть опция, позволяющая перераспределять артефакты.

enter image description here

Просто выберите репозитории в левом, выберите репозиторий, который вы хотите изменить политику, а затем установить его на разрешение передислоцировать.

+0

Это хороший вариант, но я заинтересован в такой возможности только из моей сборки и не позволяю кому-либо повторно развернуть выпущенный артефакт. Могу ли я включить его во время сборки и отключить, когда сборка завершена? –

+0

не думаю, что это возможно, потому что кто решает, может ли артефакт быть перераспределен, это сервер, а не клиент – leozin

Смежные вопросы