2010-08-25 11 views
9

Me parece un poco descabellado, pero ¿hay alguna tarea ANT para ver un directorio en busca de cambios y luego ejecutar una clase ANT particular cuando cambia el directorio?¿Hay una tarea ANT para ver un directorio de cambios?

+0

Bueno, no he encontrado una solución simple para esto, así que estoy usando un comando específico de bash por el momento: 'inoticoming --foreground ./src/ ant \;' – leeand00

Respuesta

5

Si los archivos solo se pueden agregar o cambiar en el directorio mirado, entonces puede usar esta tarea simple OutOfDate de antcontrib.

<property name="watched-dir.flagfile" 
    location="MUST be not in watched dir"/> 
<outofdate> 
    <sourcefiles> 
    <fileset dir="watched-dir"/> 
    </sourcefiles> 
    <targetfiles> 
    <pathelement location="${watched-dir.flagfile}"/>   
    </targetfiles> 
    <sequential> 

    <!--Tasks when something changes go here--> 

    <touch file="${watched-dir.flagfile}"/> 
    </sequential> 
</outofdate> 

Si los archivos pueden desaparecer de la dir-visto, entonces usted tiene un problema más complicado, que pueda solucionar mediante la creación de la estructura de directorios sombra de la dir visto y comprobar si es compatible con el visto-dir. Esta tarea es más compleja, pero te voy a dar un script para crear un directorio de sombra, ya que no es sencillo:

<property name="TALK" value="true"/> 
<property name="shadow-dir" 
    location="MUST be not in watched dir"/> 

<touch 
    mkdirs="true" 
    verbose="${TALK}" 
> 
    <fileset dir="watched-dir"> 
    <patterns/> 
    <type type="file"/> 
    </fileset> 

    <!-- That's the tricky globmapper to make touch task work --> 
    <globmapper from="*" to="${shadow-dir}/*"/> 
</touch> 

<!-- 
    Due to how touch task with mapped fileset is implemented, it 
    truncates file access times down to a milliseconds, so if you 
    would have used outofdate task on shadow dir it would always 
    show that something is out of date. 

    Because of that, touching all files in ${shadow-dir} again fixes 
    that chicken and egg problem. 
--> 
<touch verbose="${TALK}"> 
    <fileset dir="${shadow-dir}"/> 
</touch> 

Con directorio de sombra creada, Voy a dejar la tarea de comprobar la consistencia de directorio como un ejercicio para el lector.

+3

No importa si el directorio de destino tiene archivos más antiguos que el directorio de origen. Quiero una tarea ant que vigile el directorio y cuando guarde los cambios en el archivo en el editor, invocará una tarea específica. – leeand00

1

Es posible que pueda utilizar la tarea Waitfor para lograr lo que desea. Bloquea hasta que una o más condiciones (como la presencia de un archivo en particular) se hagan realidad.

+0

Sin embargo, esa tarea de hormiga sí encuesta. ¿No hay forma de que la tarea ant se suscriba al directorio por cambios? – leeand00

+1

¿Qué quiere decir con "suscribirse"? ¿Está atento a los eventos del sistema de archivos? – akr

0

Se puede combinar la tarea apply con un fileset selector

<apply executable="somecommand" parallel="false"> 
    <srcfile/> 
    <fileset dir="${watch.dir}"> 
    <modified/> 
    </fileset> 
</apply> 

El conjunto de archivos comprobará los archivos contra una suma de comprobación MD5 almacenados para los cambios. Tendrá que poner ANT en un bucle para ejecutar este control repetidamente. esto es fácil de hacer en Unix:

while true 
> do 
> ant 
> sleep 300 
> done 
3

Si no es una tarea Ant que hará esto:

https://github.com/chubbard/WatchTask

Requiere 1.7+. Puede ver cualquier cantidad de conjuntos de archivos e invocar cualquier destino dependiendo de qué conjunto de archivos proviene.

+0

No tiene licencia ... :( –

+1

@JethroLarson ahora sí. Agregado el mismo día que tu comentario, parece :) :) – kekkis

+0

aún no he descubierto cómo usarlo, no sé dónde para encontrar el JAR sus referencias, no hay suficiente documentación. – Vadorequest

Cuestiones relacionadas