Ein Vergleich mit dem Make-System
Simon Lembke (WI4139)
Ähnlich wie Make benötigt Ant eine Datei, in der sämtliche Aufgaben
beschrieben werden. Die Programmierer haben sich für XML-Dateien entschieden,
da diese zum einen für Menschen einfach zu lesen sind und zum anderen mit
einer Vielzahl an Programmen bearbeitet werden können. Diese so genannten
Build-Files sind leichter zu verstehen als Makefiles, auch wenn man sich vorher
noch nicht mit Ant beschäftigt hat. Wenn nicht anders über -f,
-file oder -buildfile angegeben, erwartet Ant eine Datei mit
dem Name build.xml im aktuellen Verzeichnis.
In jedem Build-File wird über das Tag <project> genau ein
Projekt definiert. Ein Projekt besteht aus mindestens einem, meistens aber mehreren
Targets, die den Regeln bei Make entsprechen. Die Targets wiederum bestehen
aus Tasks, die festlegen was beim Aufruf geschehen soll.
Das Tag <project> ist sozusagen das Hauptelement eines Build-Files, denn alle anderen Elemente sind Kind-Elemente davon. Mit Hilfe von drei Attributen wird ein Projekt noch näher beschrieben: default, name und basedir. Default legt fest, welches der Targets ausgeführt wird, wenn kein anderes beim Aufruf gewählt wurde und muss auf jeden Fall angegeben werden. Die anderen beiden Attribute sind optional und definieren, in welchem Verzeichnis relative Pfade starten sollen (basedir) bzw. wie das Projekt heißt (name).
<project name=“Test“ default=“compile“ basedir=“.“> . . . </project>
Wie schon erwähnt entsprechen die Targets in Ant den Regeln bei Make.
Mit Hilfe des Attributs depends kann festgelegt werden, welche Targets
gestartet werden müssen, bevor das eigentliche Target ausgeführt wird.
Wenn es sich um mehrere Abhängigkeiten handelt, werden die einzelnen Targets
durch Kommata getrennt. Ant achtet darauf, dass die Targets in der richtigen
Reihenfolge und jeweils nur ein Mal ausgeführt werden, selbst wenn mehrere
Targets von demselben Target abhängen.
Jedes Target muss über das Attribut name einen eindeutigen Namen
bekommen, über den es angesprochen werden kann. Mit Hilfe von description
kann eine einzeilige Beschreibung vergeben werden, die in der Projektdokumentation
angezeigt wird.
<project name=“Test“ default=“compile“ basedir=“.“> <target name=”compile” depends=”init” description=”Die Quellen kompilieren” /> </project>
Mit dem Befehl ant -projecthelp bekommt man eine Liste der Targets angezeigt, für die eine Beschreibung über das description-Attribut eingegeben wurde. Beim Aufruf von Ant können ein oder mehrere Namen von Targets angegeben werden, die ausgeführt werden sollen. Alle Zeichenketten, die am Ende des Befehls hinter den Optionen stehen, werden als auszuführende Targets interpretiert.
Bevor wir uns damit beschäftigen wie man den einzelnen Targets ihre Tasks
zuordnen kann, soll kurz geklärt werden, was Tasks eigentlich sind. Tasks
sind Klassen. Diese Klassen werden ausgeführt, erfüllen eine bestimmte
Aufgabe und werden danach wieder beendet. Ant bringt von Haus aus eine ganze
Menge Tasks mit, z.B. um Dateien zu kopieren oder zu löschen, Archive zu
packen oder entpacken, um JavaDoc zu erstellen oder einfach um Klassen zu kompilieren
und vieles mehr. Daneben gibt es optionale Tasks, die nur verfügbar sind,
wenn zusätzliche Dateien installiert sind. Zu dieser Gruppe gehören
z.B. das Testen mit JUnit oder das Kopieren von Dateien per FTP. Außerdem
können ganz einfach eigene Tasks hinzugefügt werden, doch dazu später
mehr.
Alle Tasks werden auf die gleiche Art und Weise in ein Target eingefügt:
<name atrribut1=“Wert1“ attribut2=“Wert2“ ... />
Hierbei ist name aber kein frei gewählter Name sondern der Name eines Tasks, der dem System bekannt ist wie z.B. javac, mit dem Java-Sourcen kompiliert werden können:
<project name=“Test“ default=“compile“ basedir=“.“> <target name=”compile” depends=”init” description=”Um die Quellen zu kompilieren”>
<javac srcdir=“src“ destdir=“classes“ /> </target> </project>
Eine Erläuterung aller Task und der zugehörigen Attribute würde den Rahmen dieser Arbeit sprengen. In der mitgelieferten Dokumentation von Ant sind jedoch alle Tasks ausführlich beschrieben.