neděle 17. prosince 2006

Eclipse a drobné maličkosti: Ant builder

Musím nepokrytě přiznat, že kdybych znal dříve níže popisovanou vlastnost Eclipse, ušetřil bych si spoustu času a nervů. Problém, kterému jste vystaveni, ať už používáte jakékoliv IDE, se jmenuje dostatečně flexibilní buildování projektu. Vývojová struktura projektu bývá totiž diametrálně odlišná od výsledku buildu např. WARu. Můžeme sice použít Ant, ale jeho manuální spouštění není efektivní. V tomto tipu si ukážeme integraci volitelného Ant skrtiptu jako dalšího projektového builderu, který se bude spouštět automaticky při uložení souboru.

Vezměme si malou modelovou web aplikaci, kde náš projekt obsahuje adresář pro zdrojové soubory, JSP a konfigurační soubory.

Vzorový projekt

Projekt s touto strukturou bychom chtěli buildovat například do WARu. Za tímto účelem si připravíme jednoduchý buildovací Ant skript, který umístíme do kořenového adresáře našeho projektu. Buildovacím adresářem bude přímo deploy adresář naší aplikace v cílovém serveru.

<?xml version="1.0"?>
<project name="Ant builder" basedir="." default="build">
  <property name="build.path" value="c:\tools\tomcat\webapps\test.war" />

  <target name="build" >
    <!-- copy classes -->
    <copy todir="${build.path}/WEB-INF/classes" preservelastmodified="true">
      <fileset dir="bin">
        <include name="**/*.*"/>
      </fileset>
    </copy>

    <!-- copy jsps -->
    <copy todir="${build.path}" preservelastmodified="true">
      <fileset dir="jsp">
        <include name="**/*.*"/>
      </fileset>
    </copy>

    <!-- copy configs -->
    <copy todir="${build.path}/WEB-INF" preservelastmodified="true">
      <fileset dir="conf">
        <include name="**/*.*"/>
      </fileset>
    </copy>
  </target>

  <!-- clean build path -->
  <target name="clean" >
    <delete dir="${build.path}" failonerror="no"/>
  </target>
</project>

Nyní tento buildovací soubor nastavíme jako nový builder našeho projektu. Project >> Properties >> Builders >> New

Vytvoření nového builderu

V dalším dialogu Choose configuration type zvolíme Ant build.

Tím se dostaneme na okno vlastností našeho nového builderu. Na záložce Main nastavíme Buildfile na námi zvolený ant skipt.

Nastavení buildovacího skriptu

Další záložkou, kterou nás zajíma, představuje Targets. Zde si můžeme zvolit, jaké se budou spuštět Ant targets z našeho buildovacího skriptu v závislosti na Eclipse událostech (After Clean, Manual Build, Auto build a During Clean). Jako výchozí target je zvolen default označený v zvoleném Ant skriptu.

Ve výše uvedeném skriptu je to target build, což plně vyhovuje. My ovšem ještě potřebujeme nastavit target (Set targets) pro událost Auto Build a During Clean. Především události Auto Build je velice důležité přiřadit target, protože tato událost nastane ve chvíli uložení jakéhokoliv souboru v projektu.

Nastavení targets na jednotlivé události

To je všechno co potřebujeme. Nyní se s každým uložením souboru v projektu automaticky spustí námi definovaný target pod událostí Auto Build.

Optimalizační tipy

Jak jste si jistě všimli, náš builder má mnohem více záložek. Z pohledu optimalizace jde celkem zajímavě modifikovat chování na záložkách JRE a Build options.

  • Pokud máte vícero projektu, pro které máte nadefinovaný Ant builder a tyto projekty jsou na sobě závislé, pak je potřeba na záložce JRE nastavit Separate JRE místo Run in the same JRE as the workspace. Pokud jsem tak neměl nastaveno, dělal neplechu paralelní clean projektů.
  • Pokud vás otravuje log výpis do konzole při každém buildu, odškrtněte Allocate Console na záložce Build options
  • Záložka Build options rovněž nabízí možnost nechat pouštět build na pozadí. Pro aktivování zaškrtněte Launch in background
  • Jestli Vám nevyhovuje, že se Ant spouští při uložení jakéhokoliv souboru v projektu pak opět na záložce Build options zaškrtněte Specify working set of relevant resources a tlačítkem Specify resources si vyberte adresáře/soubory při jejichž uložení se zavolá událost Auto Build, spouštějící definovaný Ant target.

Poznámka: pokud seAnt nevolá, zkontrolujte zaškrtnutí volby v menu Project >> Build Automatically