A Java alkalmazásainkat az Apache Ant build eszközzel fogjuk elkészíteni.
Ant
Miért van szükség egy build eszközre? Miért nem elég fordítjuk a programot és futtatjuk?
Egy build tool, amilyen az ant is, többet tud nyújtani, mint csupán a fordítás.
Ha szükségünk van egy vagy több elemre az alábbi listából, akkor érdemes valamilyen build eszközt használni.
- kód fordítása
- csomagkészítés (pl jar)
- a futtatható programok elhelyezése teszt szerverre
- változások tesztelése (regressziós tesztelés)
- kódot átmásolni valahová
Ezek alapján már látható, hogy a buildelés folyamata bővebb, mint maga a fordítás.
Több feladatot is magában foglal.
Telepítés
- Java és Ant letöltése
- Java telepítés után állítsuk be a JAVA_HOME környezeti változót!
- Az Ant binárisok kicsomagolása után állítsuk be az ANT_HOME környezeti változót!
- A JAVA_HOME és ANT_HOME környezeti változókat adjuk hozzá a PATH környezeti változóhoz!
- Teszteljük az ant -version paranccsal, hogy megfelelően működik-e az ant.
Build fájlok
Az ant xml alapú build fájlt/okat használ, melynek neve (ez nem kötelező, de ajánlott) build.xml.
Egy egyszerű build.xml a következőképpen néz ki.
<?xml version="1.0"?>
<project name="Hello World Project" default="info">
<target name="info">
<echo>Hello World - Welcome to Apache Ant!</echo>
</target>
</project>
A build.xml-t mindig a projekt mappa gyökerébe rakjuk.
A project elem
Attribútum |
Leírás |
name |
A projekt neve. Opcionális |
default |
Az alapértelmezett target megadására szolgál. Kötelező. (Targeteket lásd alább) |
basedir |
A kiindulási könyvtár, a projekt gyökérkönyvtára. Opcionális. |
A target elem
A target elemben adhatunk meg összetartozó feladatokat, melyeket egyben kell végrehajtani.
A target-ek között függőségeket is adhatunk meg (depends attr.).
Például a deploy target függ a package targettől, ami függ a compile targettől (Sorrendiség biztosítható).
Attribútum |
Leírás |
name |
A target neve. Kötelező |
depends |
Megadhatóak a targetek nevei, amitől ez a target függ (több függőség esetén vessző az elválasztó). Opcionális |
description |
A target rövid leírása. Opcionális. |
if |
A target-et csak akkor engedi végrehajtani, ha a feltétel igaz. Opcionális. |
A fenti példa futtatása
Nyissunk command prompt-ot ott, ahol a build.xml található és adjuk ki az ant parancsot.
Mivel a fenti példában a default az info target ezért argumentum nélkül ez a target hajtódik végre.
Az ant parancsnál megadhatjuk, hogy melyik target-et szeretnénk végrehajtani.
Pl.: ant info
Property
A változókat váltja ki.
Példa:
<property name="build" value="build"/>
<target name="init" description="Projekt inicializálás">
<mkdir dir="${build}"/>
</target>
Az init target létrehozza a build mappát (mkdir), melyet a property-ben állíthatunk be.
A változók hivatkozása a ${változó} megadással lehetséges.
Az ant rendelkezik előre definiált property halmazzal is.
Property |
Leírás |
ant.file |
A build fájl helye. |
ant.version |
Az ant verzióját adja meg |
basedir |
A projekt gyökérkönyvtára, megegyezik azzal, amit a project elemben megadtunk. |
ant.project.name |
A projekt neve. Megegyezik azzal, amit a project name attribútumában megadtunk. |
ant.project.default-target |
Az alapértelmezett target-et adja meg |
A property-ket nagyobb project esetén mindig rakjuk ki egy külön *.properties fájlba, mert így a build.xml-t
nem kell majd módosítani elég a .properties fájlt lecserélni az adott környezetnek megfelelően.
<property file="build.properties"/>
<target name="init" description="Projekt inicializálás">
<mkdir dir="${build}"/>
</target>
A properties fájlban kulcs érték felsorolások találhatóak: kulcs=érték formában.
Kommentet a # használatával készíthetünk.
A fenti példához tartozó build.properties fájl:
#A build mappa neve
build=build
Fileset
Fájlokat foghatunk össze egy halmazba.
Bizonyos mintának megfelelő elemeket bevehetünk illetve kizárhatunk a fileset-ből.
Példa:
<fileset dir="${src}" casesensitive="yes">
<include name="**/*.java"/>
<exclude name="**/*Stub*"/>
</fileset>
Az összes java kiterjesztésű fájl bevétele, de a Stub.ot tartalmazó elemek kizárása.
Taskok
- könyvtár létrehozása:
<mkdir dir="${build}"/>
- fordítás:
<javac srcdir="${src}" destdir="${build}"/>
Az srcdir-ben lévő elemeket fordítja le, és a .class fájlokat a destdir-be rakja.
- fájlok másolása:
<copy todir="${dist}">
<fileset dir="${script}"/>
</copy>
A todir-be másolja a copy-n belül megadott fájlokat (most a script-ben található feájlokat).
- jar fájl készítése
<jar jarfile="${dist}/projekt.jar" basedir="${build}" manifest="${etc}/Manifest"/>
jarfile <- megadja, hogy hova rakjuk az elékszült jar fájlt.
basedir <- innen veszi a .class fájlokat
manifest <- ebben az állományban adjuk meg a main-t tartalmazó osztályt