Ответ 1
Возможно, ваша IDE или какой-либо другой процесс удерживается в папке "target" и не позволяет maven удалить ее.
Девять раз из десяти, когда я запускаю 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] ------------------------------------------------------------------------
Возможно, ваша IDE или какой-либо другой процесс удерживается в папке "target" и не позволяет maven удалить ее.
В основном это вызвано индексированием Windows. Исключение проблемы с исключением целевых или .jar расширений из индексации. Моя лучшая практика заключается в исключении расширения .jar.
Чтобы исключить целевые файлы:
Чтобы исключить все .jar файлы:
Отключение службы поиска окон на Win7 работало для меня
Проблема заключается в том, что 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 "Build automatically" из меню проекта, когда вы это сделаете.
Часто вы сталкиваетесь с этой проблемой, когда в Windows, поскольку Windows не делает (обычно), позволяет удалить файл, который используется. Помимо (больно), проходящего через всю вашу конфигурацию Maven, ваш лучший выбор - просто не строить на Windows (например, использовать Linux/Solaris/любую виртуальную машину).
Ниже приведены мои выводы -
Помимо IDE, держащейся за банку, иногда у вас будет некоторый процесс Java, который также может вызвать это. Найдите в диспетчере задач любой процесс " java.exe"/"javaw.exe" и уничтожьте его.
Это помогло мне решить это время от времени.
Я предполагаю, что вы открываете файлы в текстовом редакторе или оставляете оболочку открытой в целевом каталоге. Если какой-либо процесс имеет блокировку файла или папки, Windows не позволит вам удалить его.
Если вы запустите инструмент, например wholockme, вы сможете увидеть, какой процесс блокирует файл.
Если вы используете IntelliJ, вы можете передать дополнительный параметр в настройках Runner Maven:
-Dmaven.clean.failOnError=false
Задайте его здесь, в параметрах VM:
Литература: http://www.jetbrains.com/idea/webhelp/maven-runner.html http://maven.apache.org/plugins/maven-clean-plugin/faq.html
Основной причиной является служба индексирования Windows, сервер приложений или среда IDE, хранящая JAR файл. Лучшее решение - отключить службу поиска Windows или исключить JAR файлы из индексации.
Другой (несовершенный) вариант mvn clean || mvn clean
. Символ двойной трубы выполняет вторую команду только в том случае, если первый из них не работает.
Смотрите Освободить блокировки общих файлов Windows, чтобы узнать, как найти и удалить блокировки записи Windows (рекомендуется использовать ProcessExplorer или Unlocker).
У меня была та же проблема, что и сборки из Hudson.
Используя handle.exe(из Sysinternals), я обнаружил, что задача java.exe имеет активный дескриптор файла в сгенерированный файл jar.
Если я убью эту задачу, следующая сборка будет успешной. Но следующая сборка после этой успешной сборки снова проваливается с той же ошибкой.
Даже если задача сборки выполнена успешно, она, похоже, не заканчивается должным образом и сохраняет файлы открытыми.
Я начинаю с Хадсоном, и сначала у меня не было этой проблемы. Затем я играл с некоторыми плагинами, и позже эта проблема возникла и была воспроизведена.
Я отключил почти все плагины (сохранились только некоторые существенные, такие как подрывная деятельность и сонар), и теперь проблема, похоже, решена.
Надеюсь, это немного поможет...
Попробуйте отключить службу индексирования Windows.
У меня была та же проблема. Я закрыл eclipse и посмотрел на запущенные процессы в диспетчере задач и увидел, что один из них называется "Java.exe", который обычно не запускается, поэтому я закончил его, а затем снова запустил "mvn clean". Он должен правильно удалить файл и работать правильно.
В моем случае есть java-процесс, который выполняет surefirebooter.jar, который является плагином для выполнения теста maven JUnit. Таким образом, вы можете просто открыть диспетчер задач и убить Java-процесс.
Это потому, что вы блокируете целевой каталог (открываете файл или входите в (под) каталог целевого каталога, или любой другой процесс/приложение использует файл из этого каталога). Если команда delete Windows также жалуется, что это не ошибка maven.
Я обнаружил, что разработка Java с Maven на Window 7 борется, когда исходный код находится на диске C. Перемещение моего кода на другой диск работает. Даже логический диск будет работать, диск не обязательно должен быть другим физическим жестким диском.
Если вы не хотите изменять параметры индексирования Windows, вы можете просто приостановить его.
вы должны закрыть все файлы в целевом, для меня я использую M2eclipse напрямую, лучше также вы можете попробовать mvn clean -Dmaven.clean.failOnError = false
Приложение, которое вы используете, должно быть остановлено. Похоже, приложение все еще работает, пока вы пытаетесь очистить приложение.
Решение перезапускает окна 7. Это помогает освободить ресурсы.