Я использую муравья 1.6.2 и пытаюсь настроить задачу, которая сравнит источник и целевой каталог, определить все подкаталоги, которые существуют в исходном каталоге и удаляют любившие названные подкаталоги в целевом каталоге.
Так, скажите, что исходный каталог имеет подкаталоги sub1, sub2, и sub3 в нем и целевой каталог имеют sub1, sub2, sub3, и sub4 в нем затем, я хотел бы удалить sub1, sub2, и sub3 от целевого dir.
Я думал, что мог сделать это при помощи FileSelector для идентификации всех каталогов в источнике, которые присутствуют в цели. Однако я не могу заставить <тип> селектор файла когда-либо возвращаться достойный каталогов.
В конечном счете я полагал, что сделаю что-то как:
<fileset id="dirSelector" dir="${install.dir}">
<type type="dir"/>
<present targetdir="${dist.dir}"/>
</fileset>
Я запустил, просто пытаясь перечислить каталоги, существующие в исходном каталоге и распечатать их:
<fileset id="dirSelector" dir="${install.dir}">
<type type="dir"/>
</fileset>
<property name="selected" refid="dirSelector" />
<echo>Selected: ${selected}</echo>
Однако я никогда не получаю ничего распечатанного с набором селектора типа к каталогу. Если я изменяю тип для регистрации, я действительно распечатывал файлы.
Существует ли лучший способ выполнить то, что я пытаюсь сделать? Я пропускаю что-то в своем использовании селектора типа?
Не написание пользовательского муравей Задача, это будет немного грязным. Следующее следует сделать трюк, если вы рады использовать Ant-Promption библиотеку. Это немного взлома (особенно то, как он использует свойства), но кажется, работает хорошо.
<project name="stackoverflow" default="delete_target_dirs">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<property name="src.dir" value="src"/>
<property name="target.dir" value="target"/>
<target name="delete_target_dirs">
<for param="file">
<path>
<dirset dir="${src.dir}">
<include name="**"/>
</dirset>
</path>
<sequential>
<basename property="@{file}_basename" file="@{file}" />
<available property="@{file}_available" file="${@{file}_basename}" filepath="${target.dir}" />
<if>
<equals arg1="${@{file}_available}" arg2="true"/>
<then>
<delete verbose="true">
<dirset dir="${target.dir}" includes="${@{file}_basename}"/>
</delete>
</then>
</if>
</sequential>
</for>
</target>
</project>