Как выполнить задачу Ant только после изменения исходных файлов? - PullRequest
16 голосов
/ 02 февраля 2009

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

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

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

Ответы [ 2 ]

21 голосов
/ 02 февраля 2009

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

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

<?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>
10 голосов
/ 06 февраля 2009

Задача 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> 

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

...