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

Ответы:

214

cleanэто собственная фаза жизненного цикла сборки (которую можно рассматривать как действие или задачу) в Maven. mvn clean installговорит Maven выполнить cleanфазу в каждом модуле перед запуском installфазы для каждого модуля.

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

Powerlord
источник
13
Я всегда думал, что установка в том числе чистой, как один из этапов ... пока я не увижу это
Junchen Лю
14
@shanyangqu К сожалению, нет. cleanнаходится в отдельном жизненном цикле , поэтому он не вызывается по умолчанию.
Powerlord
47

Maven позволяет указывать цели или этапы жизненного цикла в командной строке (или оба).

cleanи installявляются две разные фазы жизненного цикла , к которому различные вставные казни связаны (либо по умолчанию или явно в вашем pom.xml )

cleanФаза, согласно конвенции, имеется в виду , чтобы сделать сборки воспроизводимым, т.е. очищает все , что было создано на предыдущих сборках. В большинстве случаев это происходит с помощью вызова clean:clean, который удаляет каталог, связанный с ${project.build.directory}(обычно называемый «целевой»)

Шон Патрик Флойд
источник
6
«установка» - это не жизненный цикл. Это фаза в жизненном цикле по умолчанию. Хотя существует «чистый» жизненный цикл, AFAIK этот параметр указывает «чистую» фазу в «чистом» жизненном цикле, а не сам «чистый» жизненный цикл.
Puce
1
@ Правда, я имел в виду «Фаза», а не жизненный цикл
Шон Патрик Флойд
38

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

cleanудаляет целевую папку - она ​​удаляет все файлы классов, документы Java, банки, отчеты и так далее. Если вы этого не сделаете clean, то maven будет только «делать то, что должно быть сделано», как если бы он не компилировал классы, когда соответствующие исходные файлы не изменились (вкратце).

мы называем это целью в муравье и целью в Maven

Андреас Долк
источник
1
Я думаю, что в этом контексте очистка и установка - это фазы жизненного цикла, а не цели.
JL_SO
4

То же самое для @Andreas_D, кроме того, если вы скажете обновить Spring с 1 версии до другой в вашем проекте, не выполняя чистку, вы получите оба в своем артефакте. Многое сталкивалось с этим при разработке Flex с Maven.

mezmo
источник