Как проверить, существует ли каталог перед удалением, используя ANT?
Используя ANT
, как я могу убедиться, что каталог существует, прежде чем пытаться его удалить?
В рамках моей текущей чистой задачи i
<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
, как я могу проверить, существует ли каталог?
Ответы
Ответ 1
Приятное и чистое решение ниже:
Использование ant -contribs.jar
При использовании этого решения обязательно поставьте следующую строку сверху
<!-- For <if> statements -->
<taskdef resource="net/sf/antcontrib/antlib.xml" />
<!-- 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>
Ответ 2
В этом конкретном случае я не буду отвечать на вопрос "как найти каталог", потому что на это уже был дан ответ, но я просто хочу указать, что в вашей чистой задаче вы можете использовать failonerror="false"
, чтобы сохранить задачу ant. Это должно быть подходящим в чистой задаче, потому что если нет ничего, чтобы очистить, это не должно быть проблемой.
<target name="clean" description="clean">
<delete dir="${build}" failonerror="false"/>
....
<delete dir="${report}" failonerror="false"/>
</target>
Это полезно, если вы не хотите устанавливать ant -contrib или не можете по какой-либо причине.
Ответ 3
с ванилью ant вы бы использовали что-то вроде =
<target name="check">
<condition property="deldir">
<available file="${somedir}" type="dir"/>
</condition>
</target>
<target name="deldir" depends="check" if="deldir">
<delete dir="${somedir}"/>
<!-- .. -->
</target>
else see = Ant проверить существование набора файлов
для аналогичного вопроса
Ответ 4
Проверьте доступную задачу.
Вот аналогичный вопрос.
Есть ли способ проверить существование каталога в Ant (а не в файле)?
Ответ 5
Вот ответ:
<target name="delete.target.directory">
<delete includeemptydirs="true" verbose="false" if="${(directory::exists(directory))}">
<fileset basedir="${directory}">
<include name="**/*.*" />
</fileset>
</delete>
</target>
Ответ 6
Вы можете сделать это, заказывая удаление списка файлов с именами, равными требуемому имени. Это намного проще и проще, чем создать специальную цель. И вам не нужны никакие дополнительные инструменты, просто чистые Ant.
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
http://ant.apache.org/manual/Types/fileset.html