Apache ANTWas ist ANT?ANT ist ein Tool, das es dem Programmierer erlaubt, durch eine zentral verwaltete Konfigurationsdatei seinen Java-Quellcode zu kompilieren. Dabei steht ANT nicht für "Ameise" sondern nach James Duncan Davidson, dem Vater von ANT, steht es für "Another Neat Tool". Aber warum ein neues "Build-Tool", wenn es doch make &Co gibt? Diese "Build-Tools" haben alle einen grossen Nachteil. Sie sind nicht Plattform unabhängig. Auch wenn man in der glücklichen Lage ist, ein "make" für jedes OS zu besitzen, heisst das noch lange nicht das der Quellcode auch überall kompiliert. Denn die sog. "Makefile"'s, die den Kompilationsvorgang steuern, können (und sind auch i.d.R.) Plattformabhängig. Diese Unzulänglichkeiten wollten die ANT Authoren für Java aus der Welt schaffen und haben so das vorliegende Tool entwickelt. Die Kompilation eines Programmpakets wird durch eine XML Datei gesteuert. Standardmäßig "build.xml" genannt. Anders als in den "Makefile"'s kann man hier aber nur von ANT vorgefertigte Befehle (die sog. Tasks) verwenden. Das garantiert die Plattformunabhängigkeit. Natürlich hat man auch die Möglichkeit eigene Tasks zu kompilieren. Installation von ANT 1.4.1Man hat zwei Möglichkeiten um ANT zu installieren. Zum einen kann man vorgefertigte Binaries verwenden und zum anderen kann man den Quellcode auch selbst kompilieren.
Vorraussetzung für ANT ist allerdings eine Funktionierende Java Installation (Bei mir 1.4). Die aktuelle 1.4er Standard Edition kann man sich hier runterladen. Hat man alle Dateien beisammen, kann die Installation losgehen.
Auf die Datei j2sdk-1_4_0-win.exe doppelklicken und dem Installationsvorgang folgen (Am besten alle Einstellungen so lassen wie sie sind). In die Datei C:\autoexec.bat müsst ihr die PATH Variable um folgendes erweitern: ;C:\j2sdk1.4.0\bin;C:\ant\bindamit die Java Programme ausgeführt werden können. Damit ANT später richtig funktioniert, sollte man noch folgende Zeilen in die C:\autoexec.bat einfügen: set JAVA_HOME=C:\j2sdk1.4.0 Die Datei j2sdk-1_4_0-linux-i386.bin in das Zielverzeichnis kopieren (Bei mir /usr/local). In dieses Verzeichnis wechseln und in der Shell sh j2sdk-1_4_0-linux-i386.bin eingeben und der Installation folgen. Nach Abschluss befindet sich Java im Verzeichnis /usr/local/j2sdk1.4.0. Mit einem beliebigen Texteditor die Datei /etc/profile öffnen und folgende Zeilen am ANFANG eintragen: JAVA_HOME=/usr/local/j2sdk1.4.0ANT_HOME=/usr/local/jakarta-ant-1.4.1 export $JAVA_HOME $ANT_HOME Jetzt muss noch die PATH Variable um folgende Zeilen erweitert werden: :$JAVA_HOME/bin:$ANT_HOME/binDie Datei jakarta-ant-1.4.1-bin.zip nach c:\ entpacken und das Verzeichnis jakarta-ant-1.4.1 in ant umbenennen (Der Grund ist ein Fehler in der Windows Batch Verarbeitung). ANT sollte dann bereits laufen. Falls ANT mit einer Fehlermeldung abbricht (Kein Speicherplatz mehr im Umgebungsbereich), müsst ihr die Speicher Einstellungen eurer DOS Box ändern. Und zwar muss die Einstellung "Ursprünglicher Umgebungsspeicher" von "Automatisch" auf "1024" eingestellt werden. Unter Linux muss die Datei jakarta-ant-1.4.1-bin.zip nach /usr/local entpackt werden. Auch hier sollte ANT mit dem Aufruf sh ant laufen. Alternativ kann man auch ein chmod +x $ANT_HOME/bin/ant durchführen um ANT in Zukunft mit ant zu starten. Aufbau einer Beispiel "build.xml" DateiWie schon mehrfach erwähnt, wird ANT durch eine XML Datei gesteuert. Aber keine Angst, wenn man ersteinmal die Struktur verstanden hat, ist es relativ einfach seine eigene build.xml zu erstellen. <project name="Projektname" default="Standard Target" basedir="Projekt Wurzelverzeichnis"> definiert. Also alles was zwischen diesen beiden Tags steht, gehört zu dem Projekt an dem gearbeitet wird. name sollte einen sinnvollen Projektnamen enthalten wie z.B. Torres. Der Parameter default enthält das Default Target (Was Targets sind, steht weiter unten). Dieses Target wird ausgeführt, wenn ANT ohne Kommandozeilen Paramter aufgerufen wird. basedir ist das Verzeichnis, in dem ANT nach Java Datei zum Kompilieren sucht. Verzeichnisse werden im Unix Format angegeben (also /Dir/Subdir/...). Kommentare werden mit <!-- beschrieben. Dann kann man sich Variablen definieren mit <property name="Variablenname" value="Der Wert der variablen"/> Die Variablen Definitionen (Properties) sollten am Anfang des Projekts stehen, damit man von überall her auf diese zugreifen kann. Ein Zugriff auf eine dieser Variablen geschieht durch "${Variablenname}". Wichtig, die Anführungszeichen gehören überall mit dazu. Das wichtigste an dem Projekt sind die sog. Targets. Diese beschreiben das eigentliche Kompilierverhalten unseres Projektes. Targets können von anderen Targets abhängen (Definiert durch das Schlüsselwort "depends"). Wichtige Targets sind z.B. "compile" oder "clean". Die Targets sind ähnlich aufgebaut wie die Variablendefinitionen <target name="Targetname z.B. compile"> Soll ein Target von einem anderen Target abhängen (d.h. das andere Target wird zuerst ausgeführt), dann sieht die Definition so aus <target name="ein anderes Target"> Innerhalb solcher Targets können wie schon angesprochen ein oder mehrere Tasks ausgeführt werden. ANT kommt schon mit einem gewissen Satz an Tasks daher. Z.B. könnte ein Task lauten <javac srcdir="${src}" destdir="${build}"/> D.h. soviel wie, kompiliere alle Dateien im "src" Verzeichnis (siehe Properties) und lege die Kompilate im "build" Verzeichnis ab. Genauso gibt es Tasks zur Erzeugung von "jar-Archiven" (<jar ...>) oder zum erstellen und löschen von Verzeichnissen. Anhand der folgenden Beispiel Datei werde ich versuchen das ganze zu verdeutlichen. Diese Datei zusammen mit einem Beispiel Programm kann man sich hier saugen. <?xml version="1.0" encoding="ISO-8859-1"?> 3 <project name="Java Test" default="dist" basedir="."> 6 <!-- Globale Parameter einstellen --> <property name="src" value="."/> <property name="build" value="build"/> 9 <property name="dist" value="dist"/> 12 <!-- Erstelle "init" Target. Es erzeugt das "build" Verzeichnis --> <target name="init"> <mkdir dir="${build}"/> 15 </target> 18 <!-- Erstelle "compile" Target welches, vom "init" Target abhängt --> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${build}"/> 21 </target> 24 <!-- Erstelle "dist" Target, welches das komplette Programmpaket erzeugt --> <!-- Es ruft zuerst das "compile" Target auf, in dem festgestellt wird, --> <!-- das zuerst "init" aufgerufen werden muss. --> 27 <target name="dist" depends="compile"> <!-- Erzeugt das Distributions Verzeichnis - Dorthin kommt das Programm --> 30 <mkdir dir="${dist}/lib"/> <!-- Erzeugt das Programmpaket und kopiert alles ins Distributions --> 33 <!-- /lib Verzeichnis --> <jar jarfile="${dist}/lib/jtest.jar" basedir="${build}" manifest="manifest"/> 36 </target> 39 <!-- Das "clean" Target löscht die compilate wieder --> <target name="clean"> <delete dir="${build}"/> 42 <delete dir="${dist}"/> </target> 45 </project>
Zeile 1 beschreibt die verwendete XML version und den zugrundeliegenden Zeichensatz. Standardmässig ist UTF-8 eingestellt, was jedoch bei mir zu einer Fehlermeldung führte. Die Manifest DateiDie Manifest Datei hat eigentlich nichts mit ANT zu tun. Dieses ist eine Besonderheit von Jar-Archiven. Wenn man ein Jar-Archiv ausführen möchte, muss das Java Laufzeit System wissen, welche Klasse die "main"-Methode enthält. Dieses kann man in der Manifest Datei folgendermassen bekannt machen: Main-Class: <Die Java Datei mit der "main"-Methode ohne Endung> Ausserdem bekommt man eine Fehlermeldung bei der Ausführung, wenn man externe Programmpakete, wie zum Beispiel log4j, in seinem Programm benutzt. Man bekommt eine "NoClassDefFoundException". Auch dieses Problem kann man umgehen, wenn man folgendes in die Manifest Datei schreibt: Class-Path: <Alle Jar-Archive durch Leerzeichen getrennt mit Endung.> Also z.B. "Class-Path: log4j.jar". Mit dieser Bekanntmachung, sucht das Java Laufzeit System die Datei "log4j.jar" in dem gleichen Verzeichnis wie die ausfhrende Jar-Datei. Pfad Angaben sind also alle relativ zu der ausfhrenden Jar-Datei. KurzreferenzAls Zusammenfassung die wichtigsten Tasks und Targets mit den häufigsten Parametern.
Das sind ersteinmal die wichtigsten Befehle für ANT. Mit diesen kann man schon funktionierende "build.xml" Dateien aufbauen. Sollten im laufe des Projekts noch andere Befehle wichtig werden, so wird diese Liste natürlich vervollständigt. Links
Manuel Schulze Last modified: Sun May 12 13:32:58 MEST 2002 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||