Подтвердить что ты не робот

В Maven, зачем запускать mvn clean?

Мне интересно, каково главное различие между запуском "mvn compile" и "mvn clean compile", в практичности.

Я понимаю, какова фактическая разница, что "mvn clean compile" удаляет все сгенерированные файлы и запускается с нуля, но зачем нам это делать? Я могу предположить, что "mvn compile" будет восстанавливать файлы, если это необходимо, правильно?

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

4b9b3361

Ответ 1

Для корректной работы некоторых плагинов требуется clean. Например (по крайней мере, в Maven 2), maven-war-plugin взрывает каждую зависимую WAR в существующее дерево каталогов. Это требует clean, чтобы избавиться от файлов, которые были удалены из зависимых WAR.

Я могу предположить, что "mvn compile" будет восстанавливать файлы, если это необходимо, правильно?

Для основных плагинов это справедливое предположение. Однако, если вы используете плагин для генерации компонентов исходного кода, я бы внимательно посмотрел на документацию и там, где вы поместили сгенерированный исходный код. Например, существует несколько неподдерживаемых плагинов, целью которых является управление генератором кода Eclipse EMF.

Ответ 2

Например: если вы переименуете класс, предыдущая скомпилированная версия останется в target/classes, пока вы не запустите clean. Это может быть совершенно безвредно, но это может вызвать проблемы, если оно автоопределяется сканированием классов и т.п.

Ответ 3

на Maven, каждый раз, когда вы хотите скомпилировать, лучше всего использовать "mvn clean". он очищает существующие классы, которые вы компилировали из последней компиляции. если вы не хотите запускать 3 строки, просто выполните "mvn test" после "mvn clean". вам не обязательно всегда делать "mvn compile".

Ответ 4

Если вы не выполняете чистую компиляцию, это означает, что вы все еще разрешаете работать с некоторыми устаревшими классами. Если ваш модуль предполагает перейти на новый класс, то даже вы пропустили это, не будет никакой ошибки компиляции из-за того, что старый класс существует в target/classes. Это останется незамеченным до тех пор, пока тот же модуль не будет построен в каком-либо другом месте/машине с чистой целью компиляции.