Ant задача запуска target Ant только в том случае, если файл существует?

Есть ли ANT Задача, которая будет выполнять блок только в том случае, если данный файл существует? У меня проблема с тем, что у меня есть общий ANT script, который должен выполнять специальную обработку, но только если присутствует конкретный файл конфигурации.

Ответ 1

Available и Condition

<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>

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