Ant не может удалить некоторые файлы в Windows

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

Какую версию Ant вы используете?

Sergey 05.03.2012 16:48

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

Thorbjørn Ravn Andersen 20.08.2012 10:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
22
2
21 388
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

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

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

По-разному ...

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

Я согласен с пунктом 3. sysinternals handle.exe бесценен как инструмент командной строки для анализа такого рода проблем.

Richard A 24.10.2008 05:30

Итак, sysinternals показывает мне, что javaw.exe имеет дескриптор файла или каталога, что теперь?

Snekse 11.03.2011 18:25
Ответ принят как подходящий

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

@StefanSprenger, вы должны выполнять свои задачи в правильном порядке

CMS 19.08.2014 14:01

Не всегда причина этой проблемы. Иногда вам просто нужно перезагрузить систему, и все работает нормально. В этом случае, вероятно, причина в том, что Windows ошибочно полагает, что процесс использует эти файлы.

Arashsoft 17.12.2015 21:41

@ShimiBandiel, спасибо, кажется логичным. Я попытался переместить файл вручную, и Windows 10 сказал мне, что он используется Eclipse. Я закрываю Eclipse, перемещаю файл и возобновляю сборку муравья. Что меня раздражает, так это то, что мне нужен этот файл в пути к классам ...

jumping_monkey 16.06.2020 12:27

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

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

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

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

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

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

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

такая же проблема для меня ... работал после перехода на 32-битный jdk ... спасибо братан

Anu Shibin Joseph Raj 31.08.2017 14:59

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

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

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

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

Я слишком часто сталкиваюсь с подобными проблемами, так как перешел на Microsoft Windows 10. Переименование файла непосредственно перед его удалением решило проблему для меня:

<rename src = "file.name" dest = "file.name.old"/>
<delete file = "file.name.old" />

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