В Maven, зачем запускать 'mvn clean'? - PullRequest
45 голосов
/ 11 января 2011

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

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

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

Ответы [ 4 ]

32 голосов
/ 11 января 2011

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

23 голосов
/ 11 января 2011

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

Другая проблема заключается в том, что при переименовании класса старая скомпилированная версия может зависать в дереве сборки и будетвключайтесь в JAR-файлы и так далее ... пока вы не запустите mvn clean.

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

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

0 голосов
/ 16 ноября 2017

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

0 голосов
/ 09 июня 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...