В чем разница между «mvn deploy» для локального репо и «mvn install»?

95

Моя команда использует внутреннее командное репозиторий maven, которое совместно используется сервером разработки с использованием Apache. Мы также запускаем сервер Continuum CI на той же машине. Сборки Maven в Continuum запускаются с целью «установить», при которой последний артефакт копируется непосредственно в общий каталог.

Вопрос в том, в чем разница между добавлением файлов в общий репо с использованием mvn installи использованием цели развертывания (плагин mvn-deploy)?

Мне кажется, что использование mvn deployсоздает дополнительные проблемы с настройкой, но я где-то читал, что установка файлов в общий репо - плохая идея по какой-то причине, связанной с внутренней работой maven.

обновление: я получаю функциональные различия между deployи install; На самом деле меня больше интересуют детали низкого уровня с точки зрения того, какие файлы создаются в репозитории maven.

Кен Лю
источник

Ответы:

167

Кен, хороший вопрос. В «Полном руководстве» я должен более подробно описать разницу. "install" и "deploy" служат двум разным целям в сборке. «установка» относится к процессу установки артефакта в вашем локальном репозитории. «развертывание» относится к процессу развертывания артефакта в удаленном репозитории.

Пример:

  1. Когда я запускаю большой многомодульный проект на своей машине, я обычно запускаю «mvn install». Это установит все сгенерированные двоичные программные артефакты (обычно JAR) в моем локальном репозитории. Затем, когда я создаю отдельные модули в сборке, Maven будет извлекать зависимости из локального репозитория.

  2. Когда приходит время развертывать снимки или выпуски, я запускаю «mvn deploy». При запуске будет предпринята попытка развернуть файлы в удаленном репозитории или на сервере. Обычно я собираюсь развертывать в диспетчере репозитория, таком как Nexus

Это правда, что запуск «deploy» потребует некоторой дополнительной настройки, вам нужно будет добавить раздел distributionManagement в свой POM.

Тим О'Брайен
источник
@ Тим, так в чем именно преимущество mvn deploy? Какие преимущества дает дополнительная конфигурация, которая требовалась в первую очередь?
Geek
4
Развертывание предназначено для развертывания артефактов на удаленном сервере. Это совершенно другой вариант использования, нежели install.
Тим О'Брайен
17

Судя по документации Maven , это похоже на разницу в том, в какой репозиторий вы устанавливаете пакет:

  • install - установить пакет в локальный репозиторий для использования в качестве зависимости в других проектах локально
  • deploy - выполняется в среде интеграции или выпуска, последний пакет копируется в удаленный репозиторий для совместного использования с другими разработчиками и проектами.

Может быть, есть некоторая путаница в том, что «установка» на CI-сервер устанавливает его в свой локальный репозиторий, которым вы, как пользователь, делитесь?

Мэтт Би
источник
4

«matt b» прав, но, если быть точным, цель «установить» копирует созданную цель в локальный репозиторий в вашей файловой системе; полезно для небольших изменений в проектах, которые в настоящее время не предназначены для всей группы.

Цель «развертывание» загружает его в ваш общий репозиторий на тот момент, когда ваша работа будет завершена, а затем может быть предоставлен другим людям, которым это требуется для их проекта.

В вашем случае кажется, что «установка» используется для упрощения управления развертыванием, поскольку локальное репо CI является общим репо. Если бы CI был на другом компьютере, он должен был бы использовать цель «развертывание».

Спенсер Кормос
источник