Opakované kompilace s GWT v Antu

U jedhoho projektu často provádíme rekompilaci jednotlivých komponent (release build). Jednou z těch komponent je uživatelské rozhraní psané v GWT (Google Web Toolkit). Ten je u produkční kompilace nesmírně pomalý, to je známá věc. Kompilační skripty máme psané v Antu.

Jenže zdrojové kódy GWT aplikace se tak často nemění, proto jsem přemýšlel, jak opakované kompilaci zabránit. Je to snadné - stačí použít Ant task uptodate, který dokáže zkontrolovat, zda má soubor (či skupina souborů) starší datum změny, než jiný soubor. V mém případě to byla skupina souborů *.java vůči souboru WAR, který je výsledným artefaktem sestavovacího skriptu.

Stačilo tedy u pravit antí cíl "gwtc" tak, aby se nejdříve provedla kontrola pomocí uptodate. Cíl gwtc je volán pouze v případě, že určitá proměnná není nastavena (gwtc-build-not-needed). Vypadá to asi nějak takto:

1:    <target name="gwtc-uptodate" depends="javac" description="Check if GWTC is really needed">  
2: <uptodate property="gwtc-build-not-needed" targetfile="${dist}/clan-ui-${DSTAMP}.war">
3: <srcfiles dir="${src-java}" includes="**/*" />
4: </uptodate>
5: </target>
6: <target name="gwtc" depends="javac,gwtc-uptodate" description="GWT compile to JavaScript" unless="gwtc-build-not-needed">
7: <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
8: <classpath>
9: <path refid="classpath" />
10: <fileset dir="${src-java}">
11: <include name="**/${project.name}.gwt.xml" />
12: </fileset>
13: </classpath>
14: <arg value="${module.name}" />
15: </java>
16: </target>

Mimochodem zdrojový kód tohoto příspěvku jsem naformátoval šikovnou utilitkou on-line. Je velká škoda, že Blogger nenabízí žádnou komponentu pro formátování zdrojáků a příkazů.
29 July 2010
twitter.com linkedin.com
google.com/+ facebook.com
flickr.com youtube.com