Есть ли у меня способ проверить наличие каталога в Ant (не файл)?
Как проверить наличие папки с помощью Ant?
мы можем проверить существование файла, но можем ли мы сделать то же самое для папки?
5 ответов:
использовать скачать задача с типом, установленным в "dir".
например:
<available file="${dir}" type="dir"/>
стандартный способ сделать условную обработку с задач условие. В приведенном ниже примере запуск doFoo будет Эхо-сообщение, если каталог существует, в то время как запуск doBar будет Эхо-сообщение если каталог.
The реж.проверьте target требуется как doFoo, так и doBar, он устанавливает реж.существует свойства значение true или false в зависимости от результата поставленной задачи. Цель doFoo будет работать только если это свойство установлено в true и добар будет работать только если он не установлен или имеет значение false.
<?xml version="1.0"?> <project name="test" default="doFoo" basedir="."> <property name="directory" value="c:\test\directory"/> <target name="doFoo" depends="dir.check" if="dir.exists"> <echo>${directory} exists</echo> </target> <target name="doBar" depends="dir.check" unless="dir.exists"> <echo>${directory} missing"</echo> </target> <target name="dir.check"> <condition property="dir.exists"> <available file="${directory}" type="dir"/> </condition> </target> </project>
антилопа предоставляет дополнительные задачи, в том числе если задача, которая может сделать обработку проще (и для меня, более интуитивно понятным), Вы можете скачать задачи антилопы из страница скачать.
вот мое решение, которое не требует установки свойств и использования целей с помощью "Если" или "если":
макро:
<macrodef name="assertDirAvailable"> <attribute name="dir" /> <sequential> <fail message="The directory '@{dir}' was expected to be available but is not"> <condition> <not> <available file="@{dir}" type="dir" /> </not> </condition> </fail> </sequential> </macrodef>
использование:
<assertDirAvailable dir="${dirToCheck}" />
мое решение с использованием версии ANT 1.8, более старые версии могут не работать из-за того, что / если не поддерживается синтаксис ${evalTrueOrFalse}.
<?xml version="1.0" encoding="UTF-8"?> <project name="DoMagic" default="build" basedir="."> <property environment="env" /> <property name="name" value="Do the ANT Magic" /> <property name="somedir" value="./must_exist_folder"/> <tstamp><format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" /></tstamp> <target name="doMagic" if="${dir.exists}"> <echo message="Do the magic stuff" /> </target> <target name="doUsage" unless="${dir.exists}"> <echo message="Do usage and help" /> </target> <target name="build"> <echo message="Do the magic" /> <condition property="dir.exists" else="false"><available file="${somedir}" type="dir" /></condition> <echo message="Folder found: ${dir.exists}" /> <antcall target="doCustomize"></antcall> <antcall target="doUsage"></antcall> </target> </project>
- ANT 1.6 или ранний ANT 1.7 не работает, обновление до выпуска ANT 1.8.
- целевые атрибуты если и если вычисляет синтаксис ${var} как true / false
- атрибут условие другое значение свойства, если имеется условие было ложным, без него переменная не ставить. Значение NotSet не совпадает с явным ложным значением.
- вызовите любую цель, но если / если атрибут не определяет, действительно ли его запуск
http://ant.apache.org/manual/properties.html#if+unless
[If/Unless] в Ant 1.7.1 и ранее эти атрибуты могли быть только именами свойств. Начиная с Ant 1.8.0, вы можете вместо этого использовать расширение свойств. По сравнению со старым стилем, это дает вам дополнительные гибкость.
вот еще один подход, позволяющий вызвать только одну задачу без использования ant-contrib.сосуд.
<target name="my-task" depends="dir-check"> <antcall target="my-task-install"/> <antcall target="my-task-update"/> </target> <target name="my-task-install" unless="dir.exists" > {some task} </target> <target name="my-task-update" if="dir.exists" > {another task} </target> <target name="dir-check"> <condition property="dir.exists"> <available file="my-dir" type="dir" /> </condition> </target>