Чем отличаются «mvn clean package» и «mvn clean install»?

277

Какие именно различия между mvn clean packageи mvn clean install? Когда я запускаю обе эти команды, кажется, что они делают одно и то же.

Бен
источник
12
Пожалуйста, ознакомьтесь с разделом Введение в Build Lifecycle - Lifecycle Reference и найдите packageи install.
Чарли Чицук
3
Один пакет (строит его в target) и при установке (упаковывает и помещает его в ваш репозиторий). Вам нужно сделать позже, если вы хотите использовать эту версию в другом модуле.
Питер Лори
3
Возможно, это должно быть вновь открыто? Ответ вполне возможен, и мне не трудно было ответить. Кроме того, если кто-то является новичком в Maven, легко увидеть, как две фазы делают одно и то же. Я отредактирую это в попытке сделать его менее расплывчатым.
Даниэль Каплан

Ответы:

371

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

packageскомпилирует ваш код, а также упакует его. Например, если ваш pom говорит, что проект - это jar, он создаст для вас jar, когда вы упакуете его и поместите где-нибудь в целевой каталог (по умолчанию).

installскомпилирует и упакует, но также поместит пакет в ваш локальный репозиторий. Это позволит другим проектам ссылаться на него и извлекать его из вашего локального репозитория.

Документация

Даниэль Каплан
источник
Почему mvn устанавливается быстрее, чем пакет mvn?
lostintranslation
9
@SharadHolani, потому что сборки являются инкрементными. mvn clean installне быстрее чем mvn package.
OrangeDog
Для моего проекта сборка пакета mvn: один сборочный файл jar занимает больше времени, чем установка mvn. Упаковать и установить обе сборки эквивалентные толстые банки?
lostintranslation
1
@RakeshYadav да, это так
Даниэль Каплан
118

Что делает clean (обычно в обеих командах) - удаляет все файлы, сгенерированные предыдущей сборкой


В связи с разницей между пакетом команд и установкой , сначала необходимо понять жизненный цикл проекта maven.


Это фазы жизненного цикла по умолчанию в Maven

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

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

порядок исполнения

проверить >> собрать >> проверить (необязательно) >> пакет >> проверить >> установить >> развернуть

Поэтому, когда вы запускаете команду mvn package , она запускает команды для всех этапов жизненного цикла до пакета

валидировать >> компилировать >> тестировать (необязательно) >> пакет

А что касается установки mvn , она запускает команды для всех этапов жизненного цикла до установки, включая пакет

проверить >> собрать >> проверить (необязательно) >> пакет >> проверить >> установить


Таким образом, фактически это означает, что команды install делают все, что делает команда package , и некоторые другие (устанавливают пакет в локальный репозиторий, для локального использования в качестве зависимости в других проектах).

Источник: ссылка на жизненный цикл Maven

Кетан Р
источник
1
Это должно быть помечено как принятый ответ. Это четко определяет и помогает оператору понять, какие этапы жизненного цикла maven существуют и почему mvn install включает пакет mvn, но не наоборот.
Джасмит Сингх
1
Maven в двух словах, отлично!
CodeSlave
19

Пакет сгенерирует Jar / war в соответствии с файлом POM. install установит сгенерированный файл jar в локальный репозиторий для других зависимостей, если таковые имеются.

фаза установки наступает после фазы пакета

Абдул Гафур
источник
сначала произойдет упаковка, затем будут установлены эти пакеты (jar / war).
Абдул Гафур
1
Msgstr "Фаза установки следует за фазой пакета". То, как это в настоящее время сформулировано, является обратным. «После» означает «после».
Чарльз Вуд
11

Пакет и установка - это различные этапы жизненного цикла сборки maven. Фаза пакета выполнит все фазы до этого и остановит упаковку проекта в качестве фляги. Аналогично, фаза установки выполнит все предыдущие фазы и, наконец, установит проект локально для других зависимых проектов.

Для понимания жизненного цикла сборки maven перейдите по следующей ссылке https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html.

Аариш Рамеш
источник
1
Что вы подразумеваете под «и, наконец, установите проект локально для других зависимых проектов»
Арун Говда
2
@ArunGowda означает, что в .m2, который создается в вашей системе после установки maven, будут добавлены проекты, которые вы упаковываете, и они будут доступны для других проектов в качестве зависимости.
JAVA
картинка 1000 слов, у кого есть схема?
@MrCholo mvn install поместит банку / войну в репозиторий Maven . Место , где все ваши зависимости Maven откладывается, обычно ~ / .m2
BRT
6

packageдобавит упакованный jarили warв вашу targetпапку, мы можем проверить это, когда мы очистим целевую папку (используя mvn clean), а затем запустим mvn package.
installбудет делать все то, что packageделает, кроме того, он будет добавлять в пакетном jarили warлокальном хранилище, а также. Мы можем подтвердить это, проверив в вашей .m2папке.

Нисарг Патил
источник