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

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам