2008-09-16 2 views
14

У меня есть сборка муравьев, которая создает каталоги, вызывает javac и все обычные вещи. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь сделать чистую (удалить все созданное вещество), отчеты о задачах удаления, которые были неспособны удалить некоторые файлы. Когда я пытаюсь удалить их вручную, он работает нормально. Файлы, по-видимому, не открыты никаким другим процессом, но муравей все еще не удаляет их. Что я могу сделать?Ant не может удалить некоторые файлы на окнах

+0

Какую версию версии Ant вы используете? – Sergey 2012-03-05 12:48:22

+1

Они все еще могут быть открыты, когда муравей пытается удалить их из предыдущей задачи. – 2012-08-20 06:25:08

ответ

12

Я столкнулся с этой проблемой один раз. Это потому, что файл, который я пытался удалить, был частью пути class для другой задачи.

2

Вы не скажете, работает ли ваша сборка в качестве текущего пользователя. Если нет, то факт, что explorer.exe или другой процесс имеет указанный каталог, также может привести к его блокировке. Но удаление этого в том же самом процессе explorer.exe будет успешным. Попробуйте Unlocker от http://ccollomb.free.fr/unlocker/, чтобы узнать, какие процессы заблокированы файлами/каталогами.

1

Есть ли что-нибудь из процесса Ant, в котором хранятся файлы (или каталог)? Это может привести к ситуации, когда вы можете удалить их после запуска муравья, но не во время.

8

Это зависит ...

  • Муравей процесс не имеет достаточных прав для удаления файлов (как правило, потому, что они были созданы другим пользователем, возможно, пользователей системы). Попробуйте запустить скрипт Ant как административный пользователь, используя Run As.
  • Windows действительно плохо при очистке файловых замков, когда процессы умирают или погибают; следовательно, Windows считает, что файл заблокирован процессом, который умер (или был убит). В этой ситуации вы ничего не можете сделать, кроме перезагрузки.
  • Получить лучшие инструменты для проверки состояния вашей системы. Я рекомендую загрузить инструменты SysInternals и использовать их вместо стандартных эквивалентов Windows.
+0

Согласен с пунктом 3. sysinternals handle.exe бесценен как инструмент командной строки для анализа такого рода проблем. – 2008-10-24 01:30:19

+0

Хорошо, поэтому sysinternals показывает мне, что javaw.exe имеет дескриптор файла или каталога, что теперь? – Snekse 2011-03-11 15:25:39

1

Версии Ant до версии 1.8.0 имеют ошибку, которая приводит к случайным ошибкам во время операции удаления. Попробуйте использовать Ant 1.8.0 или новее.

Вы можете увидеть детали ошибки здесь https://issues.apache.org/bugzilla/show_bug.cgi?id=45960

3

Использование Ant Retry задача помогла мне. Я только что обернул его вокруг задачи «Удалить».

0

У меня была эта проблема много в последнее время, и она случайная. Один раз он работает, в следующий раз, когда он не работает. Я использую NetBeans (в случае, если это имеет значение), и я добавил много дополнительных задач для build.xml. У меня была эта проблема в задаче -post-jar. Это произойдет, когда я вызову unjar в файле, а затем удалю. Я подозреваю, что NB пытается сканировать банку, и это вызывает блокировку.

Что сработало для меня, это сразу же переименовать банку в начале -post-jar и добавить к ней расширение .tmp. Затем я вызываю unjar в файле temp. Когда я закончил, я переименую обратно в нужное имя баннера.

0

У меня также была такая же проблема, и я попытался вручную удалить каталоги сборки. Наконец, я решил это, переименовав артефакт .jar моего проекта на другое имя из самого имени проекта. Например: мой проект был порталом, и мой скрипт, используемый для создания скрипта, создавал portal.jar, где мусор eclipse не смог удалить этот portal.jar. Когда я изменил свой build.xml, чтобы сгенерировать мой .jar как portalnew.jar, eclipse смог удалить этот портал new.jar в следующий раз. Надеюсь это поможет.

2

Я столкнулся с той же проблемой.
У меня не было никакого набора классов или антивируса, запущенного на моей машине.
Однако версия ANT, которую я использовал, была 32 бит, а установленная JDK была 64 бит.
Я установил 32-битный JDK, и проблема была решена.

0

В моем случае мой муравьиный чист не работал с Eclipse, не смог удалить файлы сборки. Я вижу это время от времени. Обычно удается повторить попытку. На этот раз нет. Пробовал бегущий муравей из командной строки, сбой Не удалось удалить «невозможно удалить». Должно быть, Eclipse держится за файл проблемы, когда я вышел из Eclipse, строка cmd смогла удалить ОК.

0

Необходимо удалить его вручную в Windows. Это сработало для меня. (Обычно файлы, подлежащие удалению, являются более старыми версиями jar. Например: если существует httpcore.4.2.5.ja5r и httpcore.4.3.jar, он попытается удалить 4.2.5.jar)

0

i столкнулся с этой проблемой, поскольку файл, который мусор пытался удалить, использовался другой службой/процессом. Я остановил службу, а затем скрипт сборки муравьев пробежал.

0

В моем случае я остановил запуск процесса Java из диспетчера задач и повторно запустил файл сборки Ant. Файл был удален, и сборка была успешной.