Почему Maven's mvn clean никогда не работает с первого раза? - PullRequest
36 голосов
/ 23 октября 2009

В девяти случаях из десяти, когда я запускаю mvn clean в своих проектах, возникает ошибка сборки. Я должен выполнить mvn clean несколько раз, пока ошибка сборки не исчезнет. Кто-нибудь еще испытывает это? Есть ли способ исправить это в Maven? Если нет, как вы обойдете это? Я написал bat-файл, который удаляет целевые папки и работает хорошо, но это не практично, когда вы работаете над несколькими проектами. Я использую Maven 2.2.1.

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to delete directory: C:\Documents and Settings\user\My Documents\software-developm
ent\a\b\c\application-domain\target. Reason: Unable to delete directory C:\Documen
ts and Settings\user\My Documents\software-development\a\b\c\application-domai
n\target\classes\com\a\b

[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6 seconds
[INFO] Finished at: Fri Oct 23 15:22:48 EDT 2009
[INFO] Final Memory: 11M/254M
[INFO] ------------------------------------------------------------------------

Ответы [ 19 ]

36 голосов
/ 23 октября 2009

Возможно, ваша IDE или какой-либо другой процесс удерживает папку "target" и не позволяет maven удалить ее.

19 голосов
/ 16 января 2013

Это в основном вызвано индексированием Windows . Исключение target папок или .jar исключение из индексации решит проблему. Моя лучшая практика исключает .jar расширение.

Чтобы исключить целевые файлы:

  1. Нажмите на значок Windows / меню Пуск
  2. Введите индексирование в поле поиска и нажмите Параметры индексирования
  3. Затем нажмите кнопку Изменить , чтобы исследовать индексацию каталогов.
  4. Снимите отметки с Целевых папок.

Чтобы исключить все .jar файлы:

  1. Нажмите на значок Windows / меню Пуск
  2. Введите indexing в поле поиска и нажмите Параметры индексирования
  3. Затем нажмите кнопку Advanced .
  4. Просмотр Типы файлов вкладка.
  5. В списке найдите jar и снимите флажок.
13 голосов
/ 12 октября 2010

Отключение службы Windows Search на Win7 у меня сработало

11 голосов
/ 23 марта 2010

Проблема в том, что eclipse постоянно читает каталоги и артефакты в вашем проекте maven, и один из них неизбежно остается открытым во время очистки.

Лучший подход - запустить maven clean из плагина eclipse (я использую m2eclipse, и это, похоже, работает хорошо).

Другим подходом такого рода работы является запуск mvn clean с флагом maven.clean.failOnError, установленным на false. Если вы обычно запускаете его дважды, этого достаточно, чтобы все работало правильно, например,

mvn clean -Dmaven.clean.failOnError=false && mvn clean -Dmaven.clean.failOnError=false

Возможно, вы захотите отключить «Автоматическую сборку» eclipse из меню проекта, пока вы это делаете.

3 голосов
/ 24 февраля 2017

Ниже приведены мои выводы -

Помимо IDE , держащегося за банку, иногда у вас будет какой-то процесс java, который также может вызвать это. Найдите в диспетчере задач любой процесс " java.exe" / "javaw.exe" и уничтожьте его.

Это помогло мне решить это время от времени.

3 голосов
/ 23 октября 2009

Часто вы сталкиваетесь с этой проблемой, когда в Windows, потому что Windows (обычно) не позволяет вам удалить файл, который используется. Помимо (болезненно) прохождения всей вашей конфигурации Maven, вам лучше всего не использовать Windows (например, использовать Linux / Solaris / любую другую виртуальную машину).

2 голосов
/ 08 октября 2014

Служба индексирования Windows, сервер приложений или IDE, в которой находится файл JAR, является основной причиной. Лучшее решение - отключить службу поиска Windows или исключить файлы JAR из индексации.

Еще один (несовершенный) вариант mvn clean || mvn clean. Символ двойной трубы запускает вторую команду только в случае неудачи первой команды.

См. Снятие блокировок общего файлового ресурса Windows для получения подробной информации о том, как найти и удалить блокировки записи Windows (рекомендуется использовать ProcessExplorer или Unlocker ).

2 голосов
/ 24 октября 2009

Я предполагаю, что вы открываете файлы в текстовом редакторе или оставляете оболочку открытой в каталоге в target. Если какой-либо процесс заблокирован для файла или папки, Windows не разрешит вам удалить его.

Если вы запустите такой инструмент, как wholockme , вы сможете увидеть, какой процесс блокирует файл.

2 голосов
/ 10 апреля 2014

Если вы используете IntelliJ, вы можете передать дополнительный параметр в настройках Maven Runner:

-Dmaven.clean.failOnError=false

Установите его здесь, в настройках VM:

Maven Runner settings

Ссылка: http://www.jetbrains.com/idea/webhelp/maven-runner.html http://maven.apache.org/plugins/maven-clean-plugin/faq.html

1 голос
/ 04 декабря 2014

В моем случае есть процесс Java, который выполняет файл surefirebooter.jar, который является плагином для выполнения теста maven JUnit. Таким образом, вы можете просто открыть диспетчер задач и убить процесс Java.

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