Freie Universität Berlin · Institut für Informatik
Softwarepraktikum · SoSe 2002
Dozent: Ulrich Kortenkamp
Marc Georgi und Jürgen Schütz · 08. Mai 2002
Ant ist ein Buildtool, also ein Tool, daß aus dem Quellcode ein fertiges Programm macht. Es ermöglicht, alles was mit dem Übersetzen des Quellcodes zusammen hängt, d.h. dokumentieren, kopieren, löschen, die Verwendung von CVS, u.s.w., mit einem Aufruf von Ant zu erledigen, und dann bei neueren Versionen immer wieder auf die gleiche Art und Weise zu wiederholen.
Zum Verwenden von Ant benötigt man eine XML-Datei, in der steht, was Ant machen soll, das sogenannte Buildfile (siehe Abschnitt 3).
Zum Aufruf von Ant, gibt man einfach ant auf der Kommandozeile ein.
Als Buildfile wird dann die Datei build.xml
verwendet. Will man ein anderes Buildfile verwenden, ruft man Ant mit ant -buildfile Name.xml
auf.
Jedes Buildfile besteht aus genau einem Project. Es beginnt mit der Zeile
<project name="Name" default="Targetname" basedir="Verzeichnis">
und endet mit </project>. Dabei ist Name der Name des Projects, Targetname der Name des Defaulttargets (siehe Abschnitt 3.2) und Verzeichnis der Name des Verzeichnisses, von dem sämtliche Pfadberechnungen ausgehen. Innerhalb des Projects steht, was Ant machen soll.
Targets sind sinnvolle Zusammenfassungen von Dingen, die Ant machen soll, also z.B. das Löschen und Erstellen von Verzeichnissen, Übersetzen oder Ausführen. Sie beginnen mit
<target name="Name">
oder <target name="Name" depends="Targetnamen">
und enden mit </target>. Dabei ist Name der Name des Targets und Targetnamen eine Liste von Targets (durch Kommas getrennt) die vorher ausgeführt werden sollen.
Beim Aufruf von Ant kann angegeben werden, welche Targets ausgeführt werden sollen. Z.B. wird beim Aufruf ant run
das Target namens run ausgeführt. Wird beim Aufruf von Ant kein Target angegeben, wird das Defaulttarget abgearbeitet.
Tasks sind die Bestandteile von Targets, in denen nun endlich etwas passiert. Sie haben (meistens) die Form
<Name Attribut1="Wert1" Attribut2}="Wert2" ... />.
Einige wichtige Tasks sind in Tabelle 1 aufgeführt. Deren Attribute, falls nicht schon im Beispiel im Abschnitt 3.6 ersichtlich, sowie viele weitere Tasks findet man unter [1, Ant Tasks].
Name | Beschreibung |
Ant | Used to execute another ant process from within the current one. |
Copydir | Used to copy an entire directory. |
Copyfile | Used to copy a single file. |
Cvs | Handles packages/modules retrieved from a CVS repository. |
Delete | Deletes either a single file or all files in a specified directory and its sub-directories. |
Deltree | Deletes a directory with all its files and subdirectories. |
Exec | Executes a system command. When the os attribute is specified, then the command is only executed when Ant is run on one of the specified operating systems. |
Get | Gets a file from an URL. |
Jar | Jars a set of files. |
Java | Executes a Java class within the running (Ant) VM or forks another VM if specified. |
Javac | Compiles a source tree within the running (Ant) VM. |
Javadoc/ Javadoc2 | Generates code documentation using the javadoc tool. |
Mkdir | Makes a directory. |
Property | Sets a property (by name and value), or set of properties (from file or resource) in the project. |
Rmic | Runs the rmic compiler for a certain class. |
Tstamp | Sets the DSTAMP, TSTAMP, and TODAY properties in the current project. |
Style | Processes a set of documents via XSLT. |
Eigene Properties erstellt man mit
<property name="Name" value="Wert"/>.
Desweiteren stellt Ant einige eigene Properties zur Verfügung (siehe [1]). Außerdem gibt es die Möglichkeit, auf Systemproperties zuzugreifen (siehe Javadoc von System.getProperties).
Um nun den Wert einer Property zu erhalten, schließe man deren Name in "${
" und "}
" ein. Z.B. ist also ${os.name}
nichts anderes als der Name des Betriebsystems.
Kommentare sind auch hier wichtig. Sie haben die folgende Gestalt
<!-- Kommentar -->.
Falls das jetzt etwas verwirrend war, kommt jetzt noch ein Beispiel, wo man sicher einiges wiederfindet.
<project name="hello" default="run" basedir="/home/robinson/emailer/schuetz">
<!-- setze properties und tstamp -->
<target name="init">
<tstamp/>
<property name="srcDir" value="test/src"/>
<property name="classDir" value="test/classes"/>
</target>
<!-- loesche die Ergebnisse alter Ant-Aufrufe -->
<target name="clean" depends="init">
<delete dir="${classDir}"/>
<mkdir dir="${classDir}"/>
</target>
<!-- uebersetze -->
<target name="compile" depends="clean">
<javac srcdir="${srcDir}" destdir="${classDir}"/>
</target>
<!-- ausfuehren -->
<target name="run" depends="compile">
<java classname="Hello">
<classpath path="${classDir}"/>
</java>
</target>
</project>
[1] Apache Software Foundation: Apache Ant 1.5 Manual
[2] Cymerman, Michael: Automate your build process using Java and Ant