Подтвердить что ты не робот

Как выполнить задачу Ant только при изменении исходных файлов?

Должен быть простой способ сделать это. Я создаю приложение Flex с помощью ant, которое зависит от библиотеки SWC, которая отлично работает, за исключением того, что она перестраивает библиотеку независимо от того, требуется она или нет. Как сообщить ant только запустить задачу, если какой-либо из исходных файлов библиотеки (*.as, *.mxml) новее, чем SWC?

Я посмотрел на <dependet> , но кажется, что удаляет только файлы, а не определяет, должна ли выполняться задача или нет. <depend> , похоже, ожидает взаимно-однозначную взаимосвязь между исходными и целевыми файлами, а не отношения "один-ко-многим" - у меня много входных файлов и один выходной файл, но нет промежуточных файлов объектов.

Большое спасибо, Alex

4b9b3361

Ответ 1

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

Я мало знаю о flex, но вы, вероятно, хотите что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="compile">

   <target name="checkforchanges">
      <uptodate property="nochanges">
         <srcfiles dir="." includes="**/*.as"/>
         <srcfiles dir="." includes="**/*.mxml"/>
         <mapper to="applicaton.flex"/>
      </uptodate>
   </target>

   <target name="compile" depends="checkforchanges" unless="nochanges">
      ...
   </target>

</project>

Ответ 2

Задача OutOfDate из ant contrib библиотека IMO намного чище, чем опция Ant uptodate. Причина в том, что вам нужно определить дополнительные цели, чтобы установить свойство.

Решение с Ant contrib (со страницы примера):

<outofdate>
    <sourcefiles>
        <pathelement path="build.xml"/>
        <fileset dir="${lib.dir}"/>
    </sourcefiles>
    <targetfiles path="${jrun.file}"/>
    <sequential>
        <mkdir dir="${build.bin.dir}"/>
        <echo file="${jrun.file}" message="java -cp ${jrun.path} $*"/>
        <chmod file="${jrun.file}" perm="ugo+rx"/>
    </sequential>
</outofdate> 

Все поддерживается хорошо внутри одной цели.