В 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".