2009-01-31 9 views
15

Ho uno script di build che fa un certo numero di cose (minimizza javascript, carica su amazon s3 ecc.). Il task minimizza ANT funziona solo sul javascript che ho modificato e ignora il resto (non ho scritto questo script). Mi piacerebbe fare qualcosa di simile per l'attività sazon amazon dove solo il contenuto aggiornato è caricato nell'attività. Qualsiasi vantaggio su come farlo sarebbe molto apprezzato.Come eseguire le attività ANT solo sui file che sono stati modificati

risposta

0

In generale è possibile eseguire questa operazione per attività con file di origine e destinazione utilizzando File Mappers, in modo che l'attività venga applicata solo ai file di origine che sono stati modificati. Non so se c'è un modo per fare qualcosa in cui Ant non può vedere i file di destinazione, come il caricamento.

+0

Se io uso l'URL per il bene nello script di build sarà che il lavoro? – Akeem

+0

Probabilmente no - dubito che Ant guarderà una destinazione remota, ma poi non l'ho provato. –

0

Se non si desidera modificare/riscrivere l'attività S3 e si desidera rimanere esclusivamente in XML, è possibile utilizzare Uptodate Task e una directory shadow per simulare questo comportamento, ad es. conserva una copia dei tuoi caricamenti (potenzialmente enormi) o solo un file vuoto con la data di creazione dell'ultima volta che hai caricato. Gli esempi nella pagina del manuale dovrebbero fornire molti suggerimenti su dove andare.

Ovviamente è possibile scrivere anche il proprio task S2Uptodate, collegandosi a S3 per confrontare le date. La soluzione preferita dipende da quanti file ci sono (ad esempio alcuni enormi dove potresti controllarli in una operazione distinta o in un numero quasi infinito di piccoli che dovresti affrontare in modo diverso.

Tu potrebbe anche ispirarsi all'uso e agli elementi di Xjc task, sebbene questo naturalmente funzioni esclusivamente su file locali

8

È possibile selezionare un set di file con un tag di data modificato.Il tag modificato è follemente potente, quindi dai un'occhiata : Ant Selectors - Modified.

Per poter dire cosa è cambiato, può mantenere una cache in un file di proprietà, che si aggiorna dopo ogni build completata, a meno che tu utilizzare l'attributo delayupdate - in modo forse per provarlo, si può avere:

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

E, naturalmente, è possibile impostare che commitUpdate tramite una riga di comando param o qualcosa del genere.

1

È possibile prendere in considerazione l'attività Ant OutOfDate fornita dalla libreria Ant-contrib. Permette di impostare un'attività sequenziale/parallela da eseguire per ogni file sorgente in un set di file. È possibile applicare un file mapper per definire i file di destinazione per testare i file di origine in modo che solo i file che sono stati modificati eseguano l'attività sequenziale/parallela specifica.

Dai un'occhiata a questo SO discussione:

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

+0

In caso di attività non coinvolge set di file, i selettori di formiche non sono di grande aiuto. –