2012-04-10 1 views
3

Я работаю над большим скриптом Ant (> 1000 строк), который я унаследовал от кого-то еще (больше не доступен). У меня проблемы с Ant, не удаляя каталоги. В какой-то момент в скрипте он работает, а в другом - нет: Ant не дает сообщение об ошибке, но он также оставляет каталоги там, где они есть.Ant удаляет первые работы, а не

Я положил некоторые заводной вокруг него, чтобы проверить наличие каталогов:

<groovy> 
    println("Directories in @{outFolder} are:") 
    new File("@{outFolder}").eachDir() { dir -> println dir.getName() } 
    </groovy> 
    <delete verbose="true" includeEmptyDirs="true" > 
    <dirset dir="@{outFolder}" includes="**/*" /> 
    </delete> 
    <echo>End of delete</echo> 
    <groovy> 
    println("Directories in @{outFolder} are:") 
    new File("@{outFolder}").eachDir() { dir -> println dir.getName() } 
    </groovy> 

Таким образом, линии вызываются и они работают. Затем вызывается другое приложение, которое создает новые каталоги. Снова повторяются те же строки (копирование и вставка, и да, они равны), но теперь каталоги не удаляются. Также: нет ошибки, Ant продолжает работать. Я использую Ant 1.8.1 для Windows Server 2008 R2. Я попытался добавить сон, чтобы предотвратить проблемы с блокировкой. Приложение, которое создает каталоги, представляет собой приложение Java (Tibco appManage). Каталоги содержат файлы XML, без файлов jar. Я проверил ANT_HOME и CLASSPATH: никаких проблем нет. Что я пропущу?

Для умных ослов: конечно, второе удаление не должно удалять все, что было создано приложением, но для устранения проблемы я сделал строки сценария максимально простыми.

Дополнительная информация: поскольку я не могу получить работу с удалением, я попытался использовать перемещение Ant, как обход. Это то, что я вижу: перемещение создает пустые каталоги в месте назначения, не удаляет файлы или каталоги из источника и не сообщает об ошибке. Кажется, что что-то не так с этими исходными каталогами/файлами (которые я пытался удалить раньше).

Другая попытка: загрузить последние версии Ant и Groovy. Те же результаты.

+0

Windows? Linux? Mac? –

+0

Просто добавила ОС в исходное сообщение: Windows Server 2008 R2 –

ответ

4

Вы используете диету. Используйте набор файлов.

Пояснение: A dirset - это не то, что вы думаете. Вы почти всегда хотите использовать набор файлов.

В первый раз он работает, потому что каталоги пусты. Во второй раз это не так. Я могу сказать это, потому что <dirset> включает в себя сами объекты каталога, но ни один из файлов внутри них, и вы используете «includeEmptyDirs» в своей задаче удаления, что не имеет никакого смысла в цирке.

В гипотетическом дереве, как это:

top/ 
    sub1/ 
    file.txt 
    sub2/ (empty) 

... коллекция dirset будет выбрать верхний /, верхний/sub1 /, и верх/SUB2 /, но не верх/sub1/файл. текст. <delete> действует на коллекцию и будет не удалять непустые каталоги. Таким образом, в приведенном выше случае он удалит верхний/суб2 (который пуст), но не top/sub1 или top /. Это также должно объяснить вам результаты вашей попытки <move>, которая дает вам некоторое представление о случаях, для которых фактически может быть полезен dirset.

A fileset содержит файлы и каталоги.

+0

Это не объясняет, почему это работает в первый раз, но не во второй раз. То, что я действительно не понимаю: удаление не работает, но Ant не сообщает о каких-либо ошибках.Но ничто не потеряло, я все равно попробовал ваше предложение, и оно работает! Благодаря! Наверное, я не понимаю тег dirset ... Дурак с инструментом ... –

+0

@SanderdeJong Я добавил более подробное объяснение, чтобы помочь вам разобраться. Однако руководство Ant очень хорошо относится к этому. Я могу понять, что вы предполагаете, что сообщение об ошибке будет сообщено, но для любого выбора, отличного от набора файлов, который включает в себя = "**/*", вы могли бы увидеть много ошибок, о которых сообщалось для отказа от удаления каталогов в том, что по-прежнему является «нормальным» " дело. –

+0

Спасибо за подробное объяснение. Хотя я вижу противоречие между «Руководством по Ant», это довольно хорошо об этом », а« Dirset - это не то, что вы думаете ». –