У чому різниця між “розгортанням mvn” до локального репо та “встановленням mvn”?


95

Моя команда використовує внутрішнє репо команди maven, яке надається спільно з сервера розробки за допомогою Apache. Ми також запускаємо сервер Continuum CI на тій же машині. Збірки Maven у Continuum запускаються з метою "встановити", яка копіює остаточний артефакт безпосередньо у спільний каталог.

Питання полягає в тому, у чому різниця між додаванням файлів до спільного репозиторію за допомогою mvn installта ціллю розгортання (плагін mvn-deploy)?

Мені здається, що використання mvn deployстворює додаткові клопоти з конфігурацією, але я вже десь читав, що встановлення файлів у спільне репо є поганою ідеєю з якихось причин, пов’язаних із внутрішньою роботою maven.

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

Відповіді:


166

Кен, гарне запитання. У «Остаточному посібнику» я повинен бути більш чітким щодо різниці. "встановити" та "розгорнути" слугує двом різним цілям у збірці. "Встановити" відноситься до процесу встановлення артефакту у вашому локальному сховищі. "розгортання" означає процес розгортання артефакту у віддаленому сховищі.

Приклад:

  1. Коли я запускаю великий мультимодульний проект на своїй машині, я зазвичай запускаю "mvn install". Це збирається встановити всі генеровані артефакти двійкового програмного забезпечення (як правило, JAR) у моєму локальному сховищі. Потім, коли я будую окремі модулі у збірці, Maven збирається отримати залежності з локального сховища.

  2. Коли настане час розгортання знімків або випусків, я збираюся запустити "mvn deploy". Запуск цього дозволить спробувати розгорнути файли на віддаленому сховищі або сервері. Зазвичай я буду розгортатися до менеджера сховищ, такого як Nexus

Це правда, що запуск "розгортання" вимагатиме додаткової конфігурації, вам доведеться надати розділ distributionManagement у вашому POM.


@Tim, то в чому саме перевага mvn deploy? Які переваги це дає для додаткової конфігурації, яка спочатку потрібна?
Geek

4
Розгортання призначене для розгортання артефактів на віддаленому сервері. Це зовсім інший варіант використання від встановлення.
Тім О'Брайен

17

З документів Maven звучить так, ніби це просто різниця в тому, до якого сховища ви встановлюєте пакет:

  • Встановити - встановити пакет в локальне сховище для використання в якості залежності в інших проектах локально
  • розгортання - здійснюється в середовищі інтеграції або випуску, копіює остаточний пакет у віддалене сховище для спільного використання з іншими розробниками та проектами.

Можливо, є певна плутанина в тому, що "встановити" на сервер CI, встановити його на місцевому сховищі, яким потім ви як користувач ділитесь?


4

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

Ціль "розгортання" завантажує його до вашого спільного сховища, коли ваша робота закінчиться, а потім може передаватися іншим людям, які потребують цього для свого проекту.

У вашому випадку здається, що "install" використовується для полегшення управління розгортанням, оскільки локальне репозиторій CI є спільним репо. Якби CI знаходився в іншому вікні, йому довелося б використовувати ціль "розгортання".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.