Ant vs. make
Pro překlad C programů na UNIXu vznikl program make. Jeho vznik se datuje snad někam do sedmdesátých letech a je to na něm také vidět — syntax odpudivá, vzpomeňme zvláště
oblíbené
odsazování příkazů tabelátory. Stejně tak rozšiřitelnost pomocí volání externích programů je v heterogenním prostředí přístup obtížně využitelný.
Proto pod křídly Apache Software Foundation vznikl Ant. Jde o aplikaci sloužící k sestavování velkých softwarových projektů, tak ostatně Ant i vznikl – při vývoji JSP kontejneru Jakarta Tomcat. O jeho kvalitách svědčí, kromě množství softwaru (za všechny jmenujme javadoc či eclipse), který s ním umí spolupracovat, i mnohá ocenění. Od Software Development Magazine dostal Ant Productivity Award 2002, JavaWorld ho zase ocenil jako Most Useful Java Community-Developed Technology.
Instalace a nastavení prostředí
Ant si můžeme stáhnout z jeho domovské stránky na apache.org. Distribuční balík si stáhneme ve formátu vhodném pro cílovou platformu a rozbalíme ho třeba do /usr/java/ant (i když podle LSB by bylo možná správnější /opt/ant). Pro používání Antu to ale nestačí, musíme ještě nastavit proměnné prostředí. U bashe toho dosáhneme vložením následujících řádků do .bash_profile nebo systémového /etc/profile:
export ANT_HOME=/usr/java/ant
export PATH=${PATH}:${ANT_HOME}/bin
Výše zmíněné nastavení by mělo zaručit, že Ant bude fungovat správně. Pokud narazíte na problémy, rozhodně zkuste nejnovější verzi, možná jste narazili na chybu, která je v ní už odstraněná. Verze 1.5 navíc přináší, kromě podpory assertions JDK 1.4, velmi užitečný příkaz -diagnostics
, jehož výstup je při hledání zdroje potíží doslova neocenitelný. Další přepínače, které se vyplatí si pamatovat, jsou -debug
a -verbose
Z možných problémů bych si dovolil vybrat jeden poměrně častý s hůře odhalitelným zdrojem. Projevuje se poněkud zavádějícím chybovým hlášením Cannot use modern/classic compiler
. To ovšem může být způsobeno několika různými příčinami — nenastavením proměnných JAVA_HOME
nebo ANT_HOME
, tím, že Ant nemůže najít rt.jar nebo tools.jar, nebo naopak výskytem ant.jar v $JAVA_HOME/jre/lib/ext
.
Project, target, task
Ant zpracovává konfigurační soubory s XML syntaxí. Každý soubor, defaultně pojmenovaný build.xml, obsahuje jeden projekt a nejméně jeden cíl (target). Každý se skládá, kromě jiného, z několika úkolů (tasks). Pro každý task existuje třída, která ho zpracovává. Z toho je patrný styl rozšiřování — přidá se task a nasměruje se na třídu, která ho zpracovává. Těchto rozšíření je k dispozici velké množství a umožňují i kompilaci jiných jazyků, než je Java.
Ke zpracování některých tasků je potřeba mít nainstalovány konkrétní softwarové balíky. Javové archivy (*.jar) v nich obsažené se umísťují do $ANT_HOME/lib
. Z těch nejzajímavějších jmenujme alespoň:
- junit — spouštění unit testů (task junit)
- xalan — XSLT processor (junitreport a další)
- jdepend — závislosti (jdepend)
- net components— ftp, telnet
Jedním z naprosto základních tasků je javac
, umožňující nastavit podmínky překladu, mimo jiné zvolit kompilátor, který má být použit. Toho lze dosáhnout dvěma způsoby — buď nastavením atributu compiler
, nebo, což ovlivní všechny výskyty javac
, nastavením build.compiler
: <property name="build.compiler" value="???"/>
. Za ???
v našem případě dosadíme jednu z hodnot:
- classic — kompilátor v JDK 1.2 a předcházejících
- modern — kompilátor v JDK 1.3 a vyšších
- jikes — open source IBM kompilátor Jikes
- kjc — kompilátor kopi z Kaffe
- gcj — kompilátor GCJ z projektu GCC
Budoucnost Antu, to je Myrmidon
Ano, Ant je dokonalý. Jeho tvůrci se však rozhodli přetvořit ho na ještě dokonalejší. Ant 2 vzniká pod kódovým jménem Myrmidon. Nová generace Ant by měla přinést srozumitelnější strukturu build.xml, jednoduché nasazení a správu tasků třetích stran, zjednodušení procesu vývoje tasků, umožnění tvorby ad-hoc tasků uvnitř build.xml v nějakém skriptovacím jazyce (nejpravděpodobněji javascript) a integraci template technologií jako XSLT pro tvorbu znovupoužitelných komponent (komponentový build file). Je tedy na co se těšit.
---
příště: tomcat