Hlavní navigace

Apache Ant 1.5

Lukáš Zapletal

Každý projekt sestávající z více souborů musí být sestaven ve správném pořadí, kompilátoru musejí být dodány správné cesty knihoven. Toto obstarává legendární make se svými bratry gmake, nmake, bmake apod. My se podíváme na jeden netradiční sestavovací systém, který ve světě sbírá jednu cenu za druhou.

Myšlenka vytvořit sestavovací systém Ant vyznikla, když se tvořily první verze JSP kontejneru Tomcat. Tomcat sestává z mnoha modulů a jeho sestavování a připravování binárních distribucí bylo značně obtížné. Jamese D. Davidsona (původního autora Tomcatu) napadlo, že by tuhle mravenčí práci mohl dělat počítač. A tak se zrodil Ant – mravenec (zkratka z angl. another neat tool). Jak bývá u nadace při webovém serveru Apache zvykem, projekt se v polovině roku 2000 prostě rozdělil do dvou na sobě nezávislých projektů a díky tomu nám vývojáři přináší již pátou stabilní verzi první řady.

Ant je konfigurovatelný, flexibilní a plně přenositelný sestavovací systém napsaný v Javě. Jeho primárním cílem je kompilace a sestavování programů v Javě, ale existují určité nadstavby a speciální konfigurace umožńující kompilovat i jiné jazyky, které se zatím v oficiální ditribuci bohužel nenacházejí. Ve světě Javy tu byla před Antem černá díra. Sestavování každý řešil po svém. Někdo používal některý standardní make program, někdo měl vlastní a jiný používal sadu shellovských skriptů. Jakmile přišel Ant, komunita ho okamžitě přijala a téměr každý větší GNU projekt v Javě využívá jeho schopností. Ant přijalo mnoho integrovaných prostředí buď formou pluginů (JBuilder, jEdit, Netbeans/SunONE), či dokonce jako pevnou součást prostředí (Eclipse, IDEA).

Instalace Antu je snadná a přímočará. Jedná se o konzolovou aplikaci. Pro její nainstalování stačí zvolit správný instalační balík pro vaši distribuci a pak jej vyzkoušet příkazem ant. Můžete si také stáhnout aktuální binárku a nainstalovat ji do /usr/local. V tomto případě budete ještě muset nastavit proměnnou ANT_HOME na adresář, kde má spouštěcí skript Antu hledat své knihovny. Tím instalace končí. Můžete Ant také vyzkoušet tak, že si stáhnete některé z IDE, který má Ant přímo zabudovaný.

Podívejme se nyní, co všechno Ant nabízí. Ze všeho nejdůležitější je kompilace a sestavování projektů. Pro definici a nastavení musíme připravit soubor build.xml. Ant rozumí mnoha XML značkám, které jsou navíc všechny zcela intuitivní, což se o většině rozsáhlejších makefiles říci nedá. Začneme hlavní značkou project. V jednom sestavovacím souboru může tak být i více projektů. Hlavní páteří projektu jsou tak jako u standartního make targets, tedy cíle sestavování. Jednotlivé cíle můžeme vázat do závislostí a typická aplikace v Javě má většinou cíle jako prepare, compile, clean, dist, install a javadoc. Cíl dist (vytvoř distribuční soubory) může být tedy závislý na cílech clean, prepare, compile (příprava adresářů a kompilace) a javadoc (vytvoření dokumentace). Poté může být spuštěn vlastní cíl dist, který vytvoří binární či zdrojové balíčky (nebo obojí). V tomto směru se Ant nijak nevymyká svým proslavenějším bratrům.

Mezi veliké výhody patří podpora závislostí class souborů. Pokud změníte nějakou třídu, na které závisí deset dalších tříd, Ant to zjistí a požene i tyto třídy do kompilátoru. Dělá to tak, že se jednoduše podívá přímo do class souborů a vyhledá si tam všechny závislosti. Ant není závislý pouze na kompilátoru javac, umí volat jikes, rmic či JSP kompilátory Tomcatu nebo BEA Weblogic serveru. Že Ant zvládne vytváření adresářů, kopírování a přesouvání souborů a jiné operace, nikoho asi nepřekvapí. Při možnosti spouštět paralelní sestavovací procesy se však tají dech. Můžete kompilovat a zároveň vytvářet dokumentaci. Když jsem si pak nastavil Ant tak, že mi při kompilaci ukázal logo mojí firmy s pěkným progress barem a na konci mi zahrál fanfáru, byl jsem příjemně překvapen.

Další vlastností Antu je možnost flexibilně modifikovat CLASSPATH proměnnou. Díky tomu můžete zjišťovat, zda jsou dostupné všechny potřebné knihovny, automaticky je vyhledávat a stahovat (!) z internetu či upozorňovat uživatele. Je to veliká výhoda. Snad největším problémem při sestavování javovských programů je neustálá modifikace různých shellovských (nebo .bat) souborů a nastavování proměnných prostředí. S Antem toto odpadá. Každý projekt má své vlastní nastavení. Každý projekt si zkontroluje, zda je vše v pořádku. Filtrování je další příjemnou vlastností Antu, při které automaticky nahrazuje tzv. tokeny ( @version@ apod.) vlastními definicemi. Vytáření ZIP/JAR souborů je v Antu hračkou. Bez studování jediného přepínače balícího programu vytvoříte distribuční balík. Stačí k tomu jediná XML značka. Podpora formátů je skutečně široká: JAR/WAR/EAR, ZIP, TAR, GZIP a BZIP a s pomocí externích programů také RPM či CAB. Po zabalení stačí soubor distribuovat na server. Ať už se jedná o webovou aplikaci, či ne, Ant tohle zvládne. Umí dodávat vytvořené balíčky do JSP a EE kontejnerů přímo metodou HotSwap nebo pomocí FTP. Skutečnou lahůdkou je pak podpora telnet sessions. Můžete číst a zapisovat do otevřeného spojení a tím např. restartovat servery a podobně. Jistě, s GNU make by to také šlo, jenže těžko asi přenositelně. To byste raději ušetřili tu práci a restartovali server ručně.

Poslední dobou se začíná prosazovat tzv. Extreme Programing. Jde o to, že by programátor měl s novou aplikací zároveň psát testy. Tímto se zaobírají projekty JUnit a Cactus (taktéž ze stáje Apache – připravuji recenze). Ant je samozřejmě podporuje. Můžete tak vytvořít cíl test, který provede sadu testů a výsledky dá do XML souboru. Následně je můžete ihned převést například do HTML. Dobře to znají například programátoři v Perlu. Ant má v sobě zabudovanou také podporu JDepend, což je produkt, který umí projít váš kód a upozornit na případné chyby či doporučit řešení (říká se tomu code quality measuring). Pokud vám nebude stačit open sourcový JDepend, můžete využít i jiné produkty, za které však budete muset řádně zaplatit.

A to ještě nekončíme dámy a pánové! Je libo digitálně podepisovat vytvářené distribuční balíčky? Nebo máte chuť něco zapsat do SQL databáze přes JDBC? Ano? I na to má Ant XML značky. Snad vám ještě něco chybí? No tak si na to napište jedoduchý skript v jazyce BeanShell (interpretovaná Java v Javě, něco jako JavaScript).

Pokud máte zájem vytvořit veliký GNU projekt s podporou CVS, automatického generování čísel pro verzování, automatického sestavování a vytváření distribucí, automatického aktualizování knihoven a automatického generování dokumentace, testů a kontroly kódu, Ant je tu pro vás. Výsledky vám pošle poštou, uloží do databáze, na web, FTP a nebo vám je talkne přes telnet.

http://jakarta­.apache.org

Našli jste v článku chybu?