Ant - Das Apache Build-Werkzeug für Java

Ein Vergleich mit dem Make-System
Simon Lembke (WI4139)


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Grundlagen von Make ] ... [ Grundlagen von Ant ] ... [ Variablen / Properties ] ...

Übersicht : Grundlagen von Ant


Build-Files

Ä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 <project>-Tag

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>

Das <target>-Tag

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.


Die Tasks

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.


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Grundlagen von Make ] ... [ Grundlagen von Ant ] ... [ Variablen / Properties ] ...