Если я запускаю mvn deploy, он создает новые артефакты или просто развертывает уже существующие артефакты на удаленном сервере? - PullRequest
23 голосов
/ 09 октября 2009

Примечание: Этот вопрос был изначально опубликован Лахиру Ганатилаке как ответ на другой вопрос . Я перевожу это здесь как отдельный вопрос для ясности.

Когда мы делаем релиз, мы просто встраиваем наш локальный компьютер и выполняем QA, а затем размещаем его в репозитории. Если мы запустим mvn deploy, создаст ли он новые артефакты, это приведет к разным артефактам в репозитории и в двоичном распределении, потому что мы создаем двоичное распределение из нашего локального репозитория. Но если кто-то получит исходный код и сделает сборку, он получит другой. Но если mvn deploy не собирается, а только развертывается, это нормально.

1 Ответ

28 голосов
/ 09 октября 2009

Как описано в Основы жизненного цикла сборки :

Жизненный цикл сборки состоит из фаз

Каждый из этих жизненных циклов сборки определяется различным списком фаз сборки, где фаза сборки представляет собой стадию в жизненном цикле.

Например, жизненный цикл по умолчанию имеет следующие фазы сборки (полный список фаз сборки см. В Справочник по жизненному циклу ):

  • validate - подтвердить правильность проекта и получить всю необходимую информацию
  • compile - скомпилировать исходный код проекта
  • test - протестировать скомпилированный исходный код, используя подходящую среду модульного тестирования. Эти тесты не должны требовать, чтобы код был упакован или развернут
  • package - взять скомпилированный код и упаковать его в распространяемый формат, такой как JAR.
  • integration-test - при необходимости обработать и развернуть пакет в среде, где можно запускать интеграционные тесты
  • verify - выполнить любые проверки, чтобы убедиться, что пакет действителен и соответствует критериям качества
  • install - установить пакет в локальный репозиторий, для локального использования в качестве зависимости в других проектах
  • deploy - выполняется в среде интеграции или выпуска, копирует окончательный пакет в удаленный репозиторий для совместного использования с другими разработчиками и проектами.

Эти этапы сборки (плюс другие этапы сборки, не показанные здесь) выполняются последовательно для завершения жизненного цикла по умолчанию. Учитывая приведенные выше этапы сборки, это означает, что при использовании жизненного цикла по умолчанию Maven сначала проверит проект, затем попытается скомпилировать исходные коды, выполнить их для тестов, упаковать двоичные файлы (например, jar), выполнить интеграционные тесты для этого пакет, проверьте пакет, установите проверенный пакет в локальный репозиторий, затем разверните установленный пакет в указанной среде.

Чтобы сделать все это, вам нужно вызвать только последний этап сборки, в этом случае разверните:

mvn deploy

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

Итак, ответ - да, mvn deploy выполнит install и создаст артефакты проекта. Но если вы ничего не измените, это создаст точно такой же артефакт.

...