2009-01-31 12 views
15

Tengo un script de compilación que hace varias cosas (minimiza javascript, carga en amazon s3, etc.). La tarea minimizar ANT solo funciona en el javascript que he modificado e ignora el resto (no escribí este script). Me gustaría hacer algo similar para la tarea de amazon s3, donde solo se carga el contenido actualizado en la tarea. Cualquier pista sobre cómo hacer esto sería muy apreciada.Cómo ejecutar tareas ANT solo en archivos que se han modificado

Respuesta

0

En general, puede hacer esto para las tareas que tienen archivos de origen y destino usando File Mappers, de modo que la tarea solo se aplique a los archivos de origen que han cambiado. No sé si hay una forma de hacer algo donde Ant no pueda ver los archivos de destino, como subir archivos.

+0

Si utilizo el URL para el activo en el guión build que el trabajo? – Akeem

+0

Probablemente no, dudo que Ant vea un destino remoto, pero entonces no lo he intentado. –

0

Siempre que no desee cambiar/reescribir la tarea S3 y quiera permanecer puramente en XML, podría usar el Uptodate Task y un directorio oculto para imitar este comportamiento, p. Ej. Guarde una copia de sus cargas (potencialmente grandes) o solo un archivo vacío con la fecha de creación de la última vez que subió. Los ejemplos en la página del manual deberían proporcionar muchos consejos a dónde ir.

Por supuesto, también podría escribir su propia tarea S2Uptodate, conectándose a S3 para comparar las fechas. La solución preferida depende de la cantidad de archivos que hay (por ejemplo, unos grandes en los que sería posible verificar cada uno en una operación distinta o un número infinito de pequeños que abordaría de manera diferente.

Usted también podría inspirarse en el uso y los elementos de Xjc task, aunque esto por supuesto opera puramente en archivos locales.

8

Puede seleccionar un conjunto de archivos con una etiqueta de fecha modificada. La etiqueta modificada es terriblemente poderosa, así que échale un vistazo : Ant Selectors - Modified.

Para que diga qué ha cambiado, puede mantener un caché en un archivo de propiedades, que se actualiza después de cada compilación correcta, a menos que utilizar el atributo delayupdate - así que quizás para probarlo, puede tener:

<param name="commitUpdate" value="false" /> 
[...] 
<ftp ...> 
    <fileset dir="src"> 
     <modified delayupdate="${commitUpdate}" /> 
    </fileset> 
</ftp> 

Y, por supuesto, se podría establecer que commitUpdate a través de un parámetro de línea de comandos o algo así.

1

Es posible que desee considerar el OutOfDate Tarea Ant proporcionado por la biblioteca Ant-contrib. Le permite establecer una tarea secuencial/paralela para ejecutar para cada archivo fuente en un conjunto de archivos. Puede aplicar un asignador de archivos para definir los archivos de destino para probar los archivos de origen, de modo que solo los archivos que se han modificado ejecuten la tarea secuencial/paralela específica.

Control hacia fuera este hilo SO:

How to execute an Ant task only when source files have been modified?

+0

En el caso de que las tareas no envuelvan el conjunto de archivos, los selectores de hormigas no son de mucha ayuda. –

Cuestiones relacionadas