В чем разница между "mvn deploy" и локальным репо и "mvn install"?

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

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

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

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

Ответ 1

Кен, хороший вопрос. Я должен быть более явным в The Definitive Guide о различии. "установить" и "развернуть" выполняют две разные задачи в сборке. "install" относится к процессу установки артефакта в вашем локальном репозитории. "deploy" относится к процессу развертывания артефакта в удаленном репозитории.

Пример:

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

  • Когда придет время для развертывания снимков или выпусков, я собираюсь запустить "mvn deploy". Выполнение этого будет пытаться развернуть файлы в удаленный репозиторий или сервер. Обычно я собираюсь развертываться в менеджере репозитория, например Nexus

Правда, для запуска "развертывания" потребуется некоторая дополнительная конфигурация, вам нужно будет предоставить раздел distributionManagement в вашем POM.

Ответ 2

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

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

Возможно, есть некоторая путаница в том, что "установить" на сервер CI устанавливает его в локальный репозиторий, который затем вы как пользователь делитесь?

Ответ 3

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

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

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