Как проверить, существует ли каталог перед его удалением, используя ANT? - PullRequest
32 голосов
/ 13 июня 2011

Используя ANT, как я могу убедиться, что каталог существует, прежде чем пытаться удалить его?

Как часть моей текущей чистой задачи, я

<target name="clean" description="clean">
    <delete dir="${build}" />
    <delete dir="${bin}" />
    <delete dir="${dist}/myrunner.${version}.jar" />
    <delete dir="${doc}" />
    <delete dir="${report}" />
</target>

Это работает хорошо, однако (очевидно) удаление происходит, когда есть что удалить.

Используя ANT, как я могу проверить, существует ли каталог?

Ответы [ 6 ]

37 голосов
/ 22 октября 2012

В этом конкретном случае я не собираюсь отвечать на вопрос «как найти, если каталог существует», потому что на него уже дан ответ, но я просто укажу, что в вашем чистом задании вы можете использоватьfailonerror="false" чтобы препятствовать выходу задачи муравья.Это должно быть подходящим для чистой задачи, потому что если нечего чистить, это не должно быть проблемой.

    <target name="clean" description="clean">
        <delete dir="${build}" failonerror="false"/>
        ....
        <delete dir="${report}" failonerror="false"/>
    </target>

Это полезно, если вы не хотите устанавливать ant-contrib или не можетекакая-то причина.

15 голосов
/ 13 июня 2011

с ванильным муравьем вы бы использовали что-то вроде =

 <target name="check">
  <condition property="deldir">
    <available file="${somedir}" type="dir"/>
  </condition>
 </target>

 <target name="deldir" depends="check" if="deldir">
 <delete dir="${somedir}"/>
    <!-- .. -->
 </target>

еще см. = Муравей проверяет наличие набора файлов
за похожий вопрос

13 голосов
/ 14 июня 2011

Хорошее и чистое решение ниже: Использование ant-contribs.jar

При использовании этого решения обязательно ставьте следующую строку сверху

<!-- For <if> statements -->
<taskdef resource="net/sf/antcontrib/antlib.xml" />

</p>

<code><!-- Remove distribution directories and their content for a clean build -->
    <target name="clean" description="clean">

        <if>
            <available file="${build}" type="dir" />
            <then>
                <delete dir="${build}" />
            </then>
        </if>
    </target>
</code>
3 голосов
/ 13 июня 2011

Проверьте доступное задание.

Вот похожий вопрос.

У меня есть способ проверить наличие каталога в Ant (не файл)?

1 голос
/ 21 октября 2014

Вот ответ:

    <target name="delete.target.directory">  
        <delete includeemptydirs="true" verbose="false" if="${(directory::exists(directory))}">
            <fileset basedir="${directory}">  
                <include name="**/*.*" />  
            </fileset> 
        </delete>
    </target> 
0 голосов
/ 16 мая 2014

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

    <delete>
        <fileset includes="name or names of file or files you need to delete"/>
    </delete>

http://ant.apache.org/manual/Types/fileset.html

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