Automatizált Java Build ApacheAnt használatával
Automatizált Java Build ApacheAnt használatával
1 TARTALOMJEGYZÉK 1 2 3 4 5 6
Tartalomjegyzék ................................................................................................................... 2 Bevezetés ............................................................................................................................ 3 Az Apache Ant ..................................................................................................................... 3 Felhasználás ........................................................................................................................ 5 Összefoglalás ....................................................................................................................... 9 Irodalomjegyzék ................................................................................................................... 9
30_Automatizalt
java build anttal
2/9
Automatizált Java Build ApacheAnt használatával
2 BEVEZETÉS Az automatizált buildelés a szoftverfejlesztés egyik legfontosabb folyamata, mely biztosítja, hogy az alkalmazás építése minden egyes alkalommal ugyanazokkal a lépésekkel, beállításokkal, paraméterekkel végrehajtható legyen. Ahogy ezek a folyamatok egyre összetettebbé válnak, úgy válik egyre fontosabb szemponttá, hogy legyen egy általános eljárás, mely nagyban megkönnyíti a fejlesztők munkáját. Az erre a célra kifejlesztett eszközök segítségével lehetőség nyílik a folyamat teljes, többek között a fordítást, a tesztelést, és publikálást is magában foglaló lépéssorozat meghatározására. Az automatizált buildelés előnyei közé tartozik, hogy segítségével könnyebben összehangolhatóak a teszt, az integrációs és az éles környezetek, illetve egyszerűbb átjárhatóságot biztosít a különböző szoftverkörnyezetek, platformok között.
3 AZ APACHEANT Az ApacheAnt egy ilyen eszköz, mely Java nyelven íródott és elsősorban Java projektek automatikus buildelésére használatos. A nyílt forráskódú alkalmazást James Duncan Davidson kezdte fejleszteni, egy zárt forráskódú Sun termék mintájára. Az Ant eredeti célja az volt, hogy a Sun JSP/Servlet motorjához, - mely később ApacheTomcat néven vált ismerté -, legyen egy egyszerűen kezelhető,platform függetlenbuild eszköz. A program mára Java fejlesztéseknél a legelterjedtebb ilyen eszközzé vált. A program célja a C/C++ világában jártás fejlesztőknek ismerős lehet, hasonló funkciókkal rendelkezik, mint az ismert Make eszköz. A Make eszköz azonban erősen épül az azt futtató környezetre, így nem valósul meg a korábban már említett, és az egyik legfontosabb szempontnak számító platformfüggetlenség. Egy példa Windows környezetben:
# rmdir /S /Q Konyvtar
Ugyan az a feladat Unix környezetben:
# rm-rfKonyvtar
Az Ant ezt a problémát nagyszámú beépített funkcióval, illetve XML alapú konfigurációs lehetőséggel oldotta meg. Az XML szabványnak köszönhetően a folyamat lépéseit egy elterjedt, 30_Automatizalt
java build anttal
3/9
Automatizált Java Build ApacheAnt használatával
mind az ember, mind pedig a gép számára könnyedén értelmezhető módon van lehetőség lépésről lépésre leírni. A feladat AntplatformfüggetlenAnt konfigurációban:
# <deletedir=”Konyvtar”/>
Természetesen igény esetén az alkalmazás lehetőséget biztosít arra is, hogy a futtató rendszer parancsait hívjuk meg. Az Ant konfigurálhatóságának szabadságára jellemző, hogy míg a Unix / jelet használja a könyvtárak útvonal elemeinek elválasztására, Windows környezet pedig a \ jelet használja, addig az Antban bármelyik megoldás tetszőlegesen használható.
Néhány példa Antban használható parancsokra:
Parancs
Leírás
Copydir
Teljes könyvtár másolása
Copyfile
Állomány másolása
CVS
CVS verziókövető rendszer kezelő
Delete
Egy állomány törlése
Deltree
Könyvtár és alkönyvtárainak törlése
Get
Állomány letöltése egy adott webcímről
Jar
Jar állomány készítése
Javac
Java forráskód fordítása
mkdir
Könyvtár létrehozás
Tstamp
Aktuális idő, dátum lekérdezése
zip
Állományok tömörítése
scp
SSH fájlmásolás
Az Ant használatához három dologra van szükség: Telepített Java Development Kit, szerkesztő a konfigurációs XML állományhoz, illetve magára az Ant csomagra. Az Ant alapértelmezett konfigurációs állománya a build.xml.
Az Ant működését és használatát a következő példán keresztül mutatom be.
Az Ant
használatához alapszintű XML tudás szükséges. 30_Automatizalt
java build anttal
4/9
Automatizált Java Build ApacheAnt használatával
4 FELHASZNÁLÁS Az ApacheAnt működését és gyakorlati felhasználását egy konkrét, működő példa build.xml konfigurációs állományon keresztül mutatom be.
<project name="AntForditoMinta" basedir="." default=”ellenoriz”> <description> Ant minta build.xml <propertyname="src" location="src"/> <propertyname="build" location="build"/> <propertyname="classes" location="classes"/> <propertyenviroment="env"/>
<description> Kornyezetivaltozokellenorzese <echomessage="Beallitottkornyezetivaltozok:"/> <echomessage="JAVA_HOME: ${env.JAVA_HOME}"/> <echomessage="ANT_HOME: ${env.ANT_HOME}"/> <mkdirdir="${build}"/> <mkdirdir="${classes}"/> <javacsrcdir="${src}" destdir="${classes}"/> <jardestfile="${build}/pelda.jar"> <manifest>
30_Automatizalt
java build anttal
5/9
Automatizált Java Build ApacheAnt használatával
A legnagyobb egysége maga a projekt (Project), melyet minden állománynak tartalmaznia kell.
Az első sorban látható project definiálásnak három attribútuma lehet: • • •
name: A projekt nevét lehet definiálni, nem kötelező paraméter default: A projekten belüli alapértelmezett cél (Target) adható meg. basedir: A munkakönyvtár megadására van lehetőség
A példában jelölt AntForditoMinta project munkakönyvtára az a könyvtár, ahol maga a build.xml található és alapértelmezetten az ellenoriz célt futtatja.
A célok (target) a fájl azon elemi, melyek pontos akciókat írnak le, vagyis megmondják hogy az adott
feladat
elvégzéséhez
pontosan
milyen
lépéseken
keresztül
vezet
az
út.
Egy
targetmegadásánál öt paramétert definiálhatunk. •
name: A cél nevét adja meg, kötelező paraméter.
•
depends: Függőségeket, sorrendet van lehetőség megadni vele különböző célok között. A példában látható, hogy a keszit cél függ az ellenoriz céltól, vagyis a keszittargetben megadott parancsok csak akkor futnak, ha az ellenoriztargetben megadottak sikeresen lefutottak. Jelen példában az ellenoriztarget a JAVA_HOME (a telepített JDK helyére mutat) illetve az ANT_HOME (az Ant telepítés helyére mutat) környezeti változó értékét írja ki a képernyőre. E két környezeti változónak az Ant helyes működéséhez definiálva kell lennie.
•
if: Feltételes futás beállítását teszi lehetővé, azaz egy adott cél csak akkor fut le, ha egy adott tulajdonság (property) be van állítva.
•
unless: Az if paraméter ellenkezője
•
description: A target leírását tartalmazza. Ahogyan a példában is látható, a <description> paraméterrel bármikor fűzhetünk leírást az állományunkhoz.
Az első target megadása előtt látható, hogy <property> tulajdonságokat adtunk meg:
<propertyname="src" location="src"/>
A <property> segítségével a név (name) paraméterrel hivatkozhatunk megadott értékre (value) vagy helyre (location) a továbbiakban, így például egy könyvtár fizikai elérési útja helyett használhatunk szimbolikus neveket is. A hivatkozás a ${nev} módon történik.
Mivel az Ant parancssori eszköz, így lehetőségünk van arra, hogy a project állomány egy adott target lépését futtassuk. 30_Automatizalt
java build anttal
6/9
Automatizált Java Build ApacheAnt használatával
# ant –buildfileteszt.xmlEztACeltFuttatsd
A fenti parancs módosítja az alapértelmezett build.xml állományt és helyette a program a teszt.xml fájlt használja, illetve az állományon belül csak az EztACeltFuttasd célt futtatja.
A targetek a meghatározott célt a feladatok (task) elvégzésével hajtják végre. Az Ant ereje a feladatok szabadságában rejlik. A program számos beépített feladattal rendelkezik,- ahogy arra már korábbi példa táblázatban utaltam -, illetve magunk is definiálhatunk saját feladatokat. Rendelkezésünkre állnak többek között állománykezelő, tömörítő, fordító, tesztelő, hálózatkezelő beépített feladatok.
Példánkban a KESZITtarget két <mkdir> feladattal rendelkezik, melyek létrehozzák a fordításhoz szükséges könyvtárstruktúrát. A létrehozni kívánt könyvtárak nevei <property> tulajdonságként vannak megadva, így ha a későbbiekben szükséges ezeket módosítani, akkor elég csak tulajdonság megadásánál megtenni azt. Ilyen név-érték tulajdonság párokat a könnyebb áttekinthetőség érdekében van lehetőség külső állományban definiálni.
<propertyfilename="tulajdonsagok.txt" comment="Definialttulajdonsagok"/>
A KESZIT target lefutása után tehát létrejön egy „BUILD” illetve egy „CLASSES” mappa.
A függőségi viszonyok mitt a következő lépés a FORDIT cél. A célban egyetlen task, a <javac> található. A parancs rekurzívan bejárja az <src> paraméterben megadott könyvtárat, ahol példánkban a .java kiterjesztésű forráskód állományok találhatóak, és elvégzi a fordítást. A lefordított .class állományokat a <destdir> paraméterben megadott célkönyvtárba helyezi. A példában
<javac>
legegyszerűbb
használati
módja
látható,
de
a
parancs
széleskörű
paraméterezési lehetőséggel rendelkezik, mellyel az alapértelmezett fordítás beállításit tudjuk módosítani.
Miután a fordítás megtörtént az Ant a konfigurációnak megfelelően a „JAR” céllal folytatja a műveletet. A <jar> feladat a megadott paraméterek alapján elkészíti a .jar állományt. A fordításhoz hasonlóan ebben a feladatban is két paramétert kötelező megadnunk: a forrást és a célt. A cél megadása egyértelműen történik, a készítendő állomány nevét definiáljuk. A forrás megadásánal az Ant egy újabb lehetőségét használjuk ki. A segítségével meghatározhatjuk, hogy 30_Automatizalt
java build anttal
7/9
Automatizált Java Build ApacheAnt használatával
egyes könyvtárokon belül mely állományra legyen értelmezve a feladat. A paraméter segítségével bővíthetjük, az <exclude> paraméterrel pedig redukálhatjuk az állományok listáját. Ezzel a lehetőséggel természetesen bármelyik task esetén élhetünk, ahol valamilyen módon állományokkal vagy könyvtárakkal végzünk műveleteket.
A példában a forras_konyvtar tartalmát,- a java kiterjesztésű állományok kivételével-, másoljuk a /cel/konyvtar könyvtárba
<excludename="**/*.java"/>
A jar állomány elkészítése után a target még a <manifest> feladat segítségével elkészíti az alkalmaztas meta-adatait tartalmazó manifest állományt a megadott paraméterek alapján. Ezzel az Ant végzett az előre definiált feladataival:
1, A környezeti változók beállításainak ellenőrzése
2,
Class könyvtár elkészítése a lefordított állományoknak, illetve a Build könyvtár a kész jar
alkalmzásnak.
3, A forráskönyvtárban lévő .java kiterjesztésű állományokat lefordítása, a kész .class állományok elhelyezése a Class könyvtárban
4, A lefordított .class állományokból a Build könyvtárba elkészíti a jar alkalmazást és a manifest állományt.
A kész állománnyal számos dolgot elvégezhetünk még, legyen szó akár dokumentelásról vagy akár hálózati kitelepítésről.
30_Automatizalt
java build anttal
8/9
Automatizált Java Build ApacheAnt használatával
5 ÖSSZEFOGLALÁS A szoftver build folyamat automatizálása egy nagyon hatásos módszer, mellyel könnyedén növelhető a fejlesztési folyamat hatékonysága. Ezt a célt természetesen bármilyen más hasonló programmal, vagy akár saját fejlesztésű parancsállományokkal is el lehet érni. Aki azonban úgy dönt,
hogy
az
Apache
Ant
alkalmazást
választja,
az
egy
egyszerűen
használható,
platformfüggetlen megoldást kap. Az XML technológiának köszönhetően a konfigurálás könnyedén elsajátítható, a már meglévő beállítások könnyedén értelmezhetőek. Az alkalmazás számos beépített parancsot tartalmaz munkánk megkönnyítésére, akinek pedig ez nem lenne elég, akár saját parancsokat is definiálhat. Az Apache Ant ezen tulajdonságai miatt számít jelenkorunk operációsrendszer-független fejlesztéseinek egyik alapjának.
Az esettanulmány elkészítéséhez munkájával hozzájárult Kisfalussy Tamás a Neuron Szoftver Kft. alkalmazottja.
6 IRODALOMJEGYZÉK ApacheAnt dokumentáció: http://ant.apache.org/manual/index.html http://hu.wikipedia.org/wiki/Apache_Ant http://ant-contrib.sourceforge.net/ XML specifikáció: http://www.w3.org/TR/REC-xml/
30_Automatizalt
java build anttal
9/9