2010-07-09 5 views
6

Il compilatore Java fornisce la build incrementale, quindi javac task ant. Ma la maggior parte degli altri processi no.Come configurare la build lazy o incrementale in generale con Ant?

Considerando i processi di compilazione, trasformano alcuni set di file (origine) in un altro set di file (destinazione).

posso distinti due casi qui:

  1. Transformator non può prendere un sottoinsieme di file di origine, solo l'intera serie. Qui possiamo solo creare build pigro - se non è stato modificato alcun file dall'origine - saltiamo l'elaborazione.
  2. Trasformatore può prendere un sottoinsieme di file di origine e produrre un risultato parziale - build incrementale.

Che cosa sono le estensioni interne, le estensioni di terze parti o altri strumenti per implementare build lazy e incrementali? Potete fornire alcuni esempi di file di build diffusi?

Sono interessato a lavorare con il compilatore GWT in particolare.

risposta

1

In relazione a GWT, non è possibile eseguire build incrementali perché il compilatore GWT esamina contemporaneamente tutto il codice sorgente e ottimizza e incorpora il codice. Ciò significa che il codice che non è stato modificato potrebbe essere valutato in modo diverso, ad esempio se si inizia a utilizzare un metodo da una classe che non è stata modificata, il metodo era nella fase di compilazione precedente esclusa, ma ora deve essere compilato.

+0

Ma sicuramente potrebbe essere possibile che il codice NO che influisce sull'uscita di un modulo GWT sia cambiato, e quindi il modulo non avrebbe bisogno di ricompilare. Le modifiche che influiscono sull'output sono qualsiasi cosa inclusa nell'albero

+0

@Andrew No, non necessario. Perché il compilatore GWT rimuove tutto il codice non utilizzato. Quindi se inizi a utilizzare un metodo da quel modulo non sarebbe disponibile. Anche perché l'ottimizzazione in linea avviene prima che venga generato l'effettivo JavaScript. Forse sarebbe possibile memorizzare nella cache risultati intermedi, ma non sono sicuro che sarebbe efficiente, perché quei risultati devono essere interpretati di nuovo e letti/scritti su disco, invece di tenerli in memoria. –

+2

Ma se nessuna sorgente Java (utilizzata per generare output JS) è stata modificata dall'ultima compilazione, non è necessario ricompilare nulla, ottimizzazioni e inlining e rimozione del codice inclusi ..... –

5

L'attività uptodate è la soluzione generica di Ant a questo problema. È abbastanza flessibile da funzionare nella maggior parte delle situazioni in cui è desiderabile una compilazione lenta o incrementale.

Ho avuto lo stesso problema di te: ho un modulo GWT come parte del mio codice, e non voglio pagare il costo (pesante!) Di ricompilarlo quando non ne ho bisogno. La soluzione nel mio caso era simile a questa:

<uptodate property="gwtCompile.mymodule.notRequired" 
    targetfile="www/com.example.MyGwtModule/com.example.MyGwtModule.nocache.js"> 
    <srcfiles dir="src" includes="**"/> 
</uptodate> 

<target name="compile-mymodule-gwt" unless="gwtCompile.mymodule.notRequired"> 
    <compile-gwt-module module="com.example.MyGwtModule"/> 
</target>