¿Cómo ejecutar una tarea Ant solo cuando los archivos fuente han sido modificados?

votos
16

Debe haber una manera fácil de hacer esto. Construyo una aplicación Flex utilizando una hormiga que depende de una biblioteca SWC, que funciona bien, excepto que reconstruye la biblioteca, ya sea que lo necesite o no. ¿Cómo le digo a hormiga que solo ejecute la tarea si alguno de los archivos fuente de la biblioteca (* .as, * .mxml) es más nuevo que el SWC?

He visto <dependset> pero parece que solo elimina archivos, no determina si una tarea debe ejecutarse o no. <depend> parece esperar una relación de uno a uno entre los archivos de origen y de destino en lugar de una relación de uno a varios: tengo muchos archivos de entrada y uno de salida, pero no archivos de objetos intermedios.

Muchas gracias, Alex

Publicado el 02/02/2009 a las 15:46
por usuario
En otros idiomas...                            


2 respuestas

votos
21

Puede usar la tarea Ant uptodate para crear una propiedad y ejecutar su otro objetivo solo si esa propiedad está configurada.

No sé mucho sobre flex, pero probablemente quieras algo como esto:

<?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>
Respondida el 02/02/2009 a las 16:23
fuente por usuario

votos
10

La tarea OutOfDate de la biblioteca ant contrib es IMO mucho más limpia que la uptodateopción Ant . La razón es que debe definir objetivos adicionales solo para establecer la propiedad.

La solución con Ant contrib (desde su página de ejemplo):

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

Todo se mantiene bien dentro de un solo objetivo.

Respondida el 05/02/2009 a las 20:44
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more