Есть ли ANT Задача, которая будет выполнять блок только в том случае, если данный файл существует? У меня проблема с тем, что у меня есть общий ANT script, который должен выполнять специальную обработку, но только если присутствует конкретный файл конфигурации.
Ant задача запуска target Ant только в том случае, если файл существует?
Ответ 1
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
Ответ 2
Это может иметь немного большее значение с точки зрения кодирования (доступно с помощью ant -contrib: http://ant-contrib.sourceforge.net/):
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Ответ 3
Так как Ant 1.8.0, по-видимому, также существует ресурс
С http:// ant.apache.org/manual/Tasks/conditions.html
Проверяет ресурс для существования. поскольку Ant 1.8.0
Фактический ресурс для тестирования указанный как вложенный элемент.
Пример:
<resourceexists> <file file="${file}"/> </resourceexists>
Я собирался переработать пример из вышеупомянутого хорошего ответа на этот вопрос, а затем нашел это
Как и в случае с Ant 1.8.0, вы можете вместо этого использовать расширение собственности; значение true (или включен или да) включит элемент, в то время как false (или выключено или нет) будет отключите его. Другие значения по-прежнему предполагается, что имена свойств и так элемент включен, только если свойство определено.
По сравнению с более старым стилем дает вам дополнительную гибкость, потому что вы можете отменить условие из командной строки или родительского скрипты:
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
из руководства Ant в http://ant.apache.org/manual/properties.html#if+unless
Надеюсь, этот пример полезен для некоторых. Они не используют ресурсы, но, возможно, вы могли?.....
Ответ 4
Я думаю, что стоит упомянуть этот похожий ответ: fooobar.com/questions/41517/...
Вот еще одно быстрое решение. Возможны другие варианты, используя тег <available>
:
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
Ответ 5
Проверьте использование фильтров имен файлов, таких как "DB _ */**/*. sql"
Вот вариант выполнения действия, если существует один или несколько файлов, соответствующих фильтру подстановки. То есть вы не знаете точное имя файла.
Здесь мы ищем файлы *. sql в любых подкаталогах, называемых " DB _ *", рекурсивно. Вы можете настроить фильтр на свои нужды.
NB: Apache Ant 1.7 и выше!
Вот цель установки свойства, если существуют соответствующие файлы:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
Вот "условная" цель, которая работает только при наличии файлов:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>
Ответ 6
Вы можете сделать это, заказывая операцию со списком файлов с именами, равными именам, которые вам нужны. Это намного проще и проще, чем создать специальную цель. И вам не нужны никакие дополнительные инструменты, просто чистые Ant.
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>