Wird Ant das klassische Make ablösen?



Ähnliche Dokumente
ANT. Kurzvortrag von Manuel Schulze.

Das Build Tool Ant. Sebastian Mancke,

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

Das Build-Tool ANT ETIS SS05

Kurzanleitung zu XML2DB

Software-Engineering Grundlagen des Software-Engineering

Web-Technologien Kick-Start

Python SVN-Revision 12

Wie konfiguiriert man Eclipse (mit oder ohne Plugin) Erich Ehses

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Hex Datei mit Atmel Studio 6 erstellen

Planung für Organisation und Technik

JCoverage. Uni Kassel Projektarbeit Software Engineering Markus Pilsl & Marko Medved

Ant - das Java Build-Tool

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

4D Server v12 64-bit Version BETA VERSION

Einführung in die Informatik Tools

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt.

Eine Einführung in die Installation und Nutzung von cygwin

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Übung: Verwendung von Java-Threads

Kompilieren und Linken

Das neue Volume-Flag S (Scannen erforderlich)

C++ mit Eclipse & GCC unter Windows

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Installations Guide für YAJSW und DTLDAP

BartPE. Dokumentation. Projektarbeit Network Services. Dozent: Wolf-Fritz Riekert. Belmondo Kovac. Autor: Andreas Dinkelacker, 3.

Enterprise java beans step-by-step

Anwendungsbeschreibung an einem Beispiel

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Qt-Projekte mit Visual Studio 2005

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Externe Bibliotheken

Installation und Aktualisierung der VMware-Tools

Lokale Installation von DotNetNuke 4 ohne IIS

Informationen zur Verwendung von Visual Studio und cmake

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC

KVIrc installieren (win) i. KVIrc installieren (win)

Programmentwicklung ohne BlueJ

In 15 Schritten zum mobilen PC mit Paragon Drive Copy 11 und VMware Player

Tipps und Tricks zur Installation von Java-basierten Programmen auf Handys

Werkzeuge der Informatik UNIX

Version 0.3. Installation von MinGW und Eclipse CDT

OP-LOG

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Windows 7 Winbuilder USB Stick

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Anwenderdokumentation PersoSim

Anleitung über den Umgang mit Schildern

Installationsanleitung. Update ATOSS SES 2.40 für Windows ATOSS Server

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Informatik I Tutorial

Bauteilattribute als Sachdaten anzeigen

Installation Messerli MySQL auf Linux

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

SFTP SCP - Synology Wiki

Visual Basic Express Debugging

Das *z13-file Handling V1.0d

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH

Tutorial -

Anleitung zur Webservice Entwicklung unter Eclipse

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper)

cs106 Informatiklabor Teil 1: Java-Installation

Künstliches binäres Neuron

GEONET Anleitung für Web-Autoren

1. License Borrowing Verfahren

Step by Step Webserver unter Windows Server von Christian Bartl

Unigraphics Schnittstelle entfernen

25 Import der Beispiele

1.1. Apache / Tomcat via JK JNI ## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED

Mobile-Szenario in der Integrationskomponente einrichten

Verknüpfung zum Angebotsassistenten erstellen

Entwurf: opsi Erweiterung für Roaming Profiles

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Installation von BackupExec 11/12 unter Debian

Konvertieren von Settingsdateien

UpToNet Events and Artists Installation der Testversion und Einrichten einer Demodatenbank

Ein Leitfaden für Anfänger unter Zuhilfenahme frei verfügbarer Software! (bei z.b. Google Microsoft Powertoys suchen, oder diesen Link verwenden )

Daten fu r Navigator Mobile (ipad)

Installation und Inbetriebnahme von Microsoft Visual C Express

Informatik 1 Tutorial

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Visualisierung auf Büro PC s mit dem ibricks Widget

Zum Download von ArcGIS 10, 10.1 oder 10.2 die folgende Webseite aufrufen (Serviceportal der TU):

WOT Skinsetter. Nun, erstens, was brauchen Sie für dieses Tool zu arbeiten:

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand:

Quiz mit Google Docs erstellen

Pascal-Compiler für den Attiny

Transkript:

Wird Ant das klassische Make ablösen? Seminarbericht von Gysi, Thomas, Ib99 Fachhochschule Aargau Departement Technik Studiengang Informatik Betreuender Dozent: Prof. H.P. Oser Windisch, 11. Dezember 2001

Abstract Ant is a Java based build tool, similar to make on Unix based systems, which is used to compile programs, create program archives and do many other nifty things. Targets are used to resolve dependencies much like they are used in make files. Ant reads a build file in XML format to complete its tasks. Many tasks are already built into Ant these are mainly for development of Java Programs. One can easily extend Ant by writing new tasks as Java classes. Ant can also be used on any Operating System with a Java Virtual Machine, making build files extremely portable. All of these virtues make Ant the build tool of choice for many Java programmers. Thomas Gysi, ib99 11.12.01 Seite 1 / 13

Inhaltsverzeichnis Einleitung...3 1 Wie Ant vorgeht...3 1.1 Targets und Dependencies... 3 1.2 Tasks... 4 2 Arbeiten mit Ant...4 2.1 Installation... 5 2.2 Starten von Ant... 5 2.3 Ant Benützen... 6 2.3.1 Die build.xml Datei... 6 3 Eingebaute Tasks, Konzepte und Typen...7 3.1.1 Der Property Task... 7 3.1.2 Wie man Auswahlmuster in Ant angibt... 7 4 Ant erweitern...8 4.1 Optionale Tasks... 8 4.2 Eigene Tasks schreiben... 8 5 Integration in IDE und Antidote...8 Schluss...9 Bibliographie...10 Anhang...11 A. Start Optionen...11 B. Eingebaute Tasks...12 Thomas Gysi, ib99 11.12.01 Seite 2 / 13

Einleitung Ant ist ein Build Werkzeug, ähnlich wie Make auf Unix Systemen, nur dass Ant gewisse Nachteile von Make nicht hat. Die meisten Build Werkzeuge lösen Abhängigkeiten auf und führen dann eine Reihe von Anweisungen aus, ganz ähnlich wie die, die auf einer Shell ausgeführt werden. Dies macht diese Werkzeuge leicht erweiterbar mit Programmen, die für die betreffende Shell geschrieben sind. Auf der anderen Seite heisst das auch, dass man sich auf ein bestimmtes Betriebssystem festlegt. Einen weiteren Nachteil von Make ist die mühsame Syntax, die vorschreibt, vor jedem Befehl einen Tabulator zu setzen, was leicht dazu führen kann, dass das Make-File nicht ausführbar ist, weil ein Leerschlag vor dem Tabulator steht, was leider nicht sichtbar ist. Es gibt Werkzeuge, wie zum Beispiel Jam, die dieses Problem lösen, aber man muss dazu jeweils eine weitere Syntax erlernen. All diese Nachteile versucht Ant zu beheben. Anstatt eine weitere Syntax einzuführen, wird der bekannte XML Standard benutzt. Anstatt Shell-Befehle auszuführen, werden sogenannte Tasks verwendet, die in Java Klassen implementiert sind und als solche ausgeführt werden. Dies macht Ant extrem Portabel, denn es braucht auf einem beliebigen Betriebssystem nur eine Java Virtual Mashine 1.1 oder besser und schon kann Ant verwendet werden. Zu diesen Vorteilen kommt für den Java Entwickler noch ein weiterer dazu. Das Erstellen von Java Docs, von JAR/WAR Dateien, und das Arbeiten mit EJBs ist mit Ant viel einfacher als mit make. Ant hat auch viele eingebaute Tasks, die auf den Java Entwickler ausgerichtet sind. Geschichtlich war Ant entwickelt worden, um Tomcat, ein anderes Jakarta Projekt, zu bauen. Beide Programme wurden ursprünglich von James Duncan Davidson geschrieben. Als andere Entwickler von dem open-source Java Projekt Ant erfahren haben, haben sie realisiert, dass Ant viele ihrer Probleme mit Make-Files lösen könnte. Somit wurde Ant zuerst von Jakarta Mitgliedern aufgegriffen. Im Janaur 2000 wurde Ant zu einem eigenen CVS Modul und zu einem eigenen Projekt unabhängig von Tomcat promoviert. Im Moment ist die aktuellste Version die Ant Version 1.4.1. Ant wird Ant benannt, weil der original Autor es als Akronym für Another Neat Tool benutzte. Inzwischen gibt es andere Erklärungen im Stil von Ameisen sind Experten beim Bauen von Dingen oder Ameisen sind sehr klein und können Dinge, die ein mehrfaches ihres Eigengewichtes sind, tragen als Beschreibung für das was Ant machen kann. 1 Wie Ant vorgeht Zusammenfassend werden Abhängigkeiten (Dependencies) zwischen verschiedenen Zielen (Targets) von Ant Aufgelöst und die Anweisungen (Tasks) darin werden ausgeführt. In diesem Kapitel werden die verschiedenen Begriffe erklärt und ein Beispiel zu diesen gezeigt. Als oberstes Wurzelelement hat eine Build-Datei (im XML Format) genau ein project Element mit drei Attributen. Diese Attribute sind der Name (name), das Basisverzeichnis (basedir), und einen standart Target (default). In einem Projekt sind dann mehrere Targets, ähnlich wie bei Make, die von einander abhängen und die dann wiederum Tasks enthalten. 1.1 Targets und Dependencies Wenn ein Entwickler an einem Projekt arbeitet, möchte er vielfach nur Teile davon kompilieren, oder er möchte zum Beispiel nicht schon von Anfang an die HTML Dokumentation erstellen lassen. Um dies zu Thomas Gysi, ib99 11.12.01 Seite 3 / 13

machen, kann er mit Ant leicht nur einen Teil seines Codes kompilieren lassen, in dem er nur dieses Teilziel angibt. Will er aber alles machen, zum Beispiel die ganze Distributionsversion erstellen, kann er die dist Target ausführen lassen. Das Erstellen einer Distribution hängt aber davon ab, dass alles schon kompiliert ist. Ant löst diese Abhängigkeiten auf. Ant bestimmt also aufgrund der Abhängigkeiten die Reihenfolge in der die Targets ausgeführt werden. Dieses Verhalten ist nicht anders als beim bekanntem Make. Ant löst die Abhängigleiten von links nach rechts auf, so wie sie im debends Attribute erscheinen. Ein Target kann aber auch schon früher ausgeführt werden, wenn ein früher Target davon abhängt. Ein Beispiel dazu: <target name="a"/> <target name="b" depends="a"/> <target name="c" depends="b"/> <target name="d" depends="c,b,a"/> Angenommen Target D wird ausgeführt, so könnte man meinen es würde zuerst C dann B und erst zuletzt A ausgeführt. Dies ist aber falsch, denn C hängt von B ab und B von A, also wird zuerst A dann B und erst zuletzt C ausgeführt. Ein Target wird zudem nur einmal ausgeführt, in diesem Beispiel werden also B und A nicht ein weiteres mal ausgeführt. Eine Abhängigkeit kann man auch je nach vorhanden sein eines Attributes mit if oder unless ausführen lassen oder nicht. Mit dem description Attribut kann man einem Tasks noch eine kurze Beschreibung geben, die beim Aufruf von Ant mit der projekthelp Option angezeigt werden. Es ist sinnvoll ein initialisierender Target zu haben, der zum Beispiel die Zeiteinstellungen mit tstamp initialisiert. Diesen gibt man dann immer als erste Abhängigkeit jedes Targets an, um in diesem Beispiel dann die Zeitvariable benutzen zu können. 1.2 Tasks Ein Task ist ein Arbeitsschritt, den Ant innerhalb eines Targets ausführt. Eigentlich ist ein Task ein stück Code, eine Java Klasse, die ausgeführt wird. Ein Task kann mehrere Attribute haben, die den Ablauf steuern und haben die folgende allgemeine Struktur: <name attribute1="value1" attribute2="value2"... /> Dabei ist name der Name des Tasks und folgend werden die Attribute, die man setzen möchte, mit ihrem Wert aufgelistet. Ant kennt zum Beispiel den Task javac für das Kompilieren von Java Quelldateien, der etwa so benützt werden kann: <javac scrdir="src" destdir="classes"/> Ant stellt eine ganze Reihe von eingebauten Tasks zur Verfügung, die im Kapitel 3 erwähnt werden. Dazu kommen noch eine Sammlung von Optionalen Tasks, die im Kapitel 4.1 erwähnt werden. 2 Arbeiten mit Ant Das Arbeiten mit Ant gestaltet sich eigentlich sehr einfach. In diesem Kapitel wird beschrieben wie man Ant richtig installiert und benützt. Thomas Gysi, ib99 11.12.01 Seite 4 / 13

2.1 Installation Voraussetzung für die Installation ist eine Java Virtual Maschine 1.1 oder neuer und einen installierten XML Parser, der in der systemweiten Klassenpfadvariable eingetragen ist. Die binäre Version von Ant enthält schon den neusten Apache Crimson XML Parser im lib Verzeichnis der Ant Installation. Die Installation der binären Ausgabe von Ant ist sehr einfach. Als erstes lädt man unter http://jakarta.apache.org/builds/ant/release/v1.4.1/bin die Binaries der aktuellsten Ant Distribution herunter. Eine Ausgabe, die nur den Quellcode enthält, wird auch angeboten, in diesem Bericht aber wird nicht darauf eingegangen. Im Moment ist die neuste Ausgabe von Ant, Ant 1.4.1. An einer neuen Version, Ant 2.0, wird noch gearbeitet. Diese neue Version soll einer grösseren Architekturänderung unterzogen werden und wird somit wahrscheinlich leicht anders zu installieren sein als hier für Ant 1.x beschrieben. Wenn man eine andere Version von Ant als die Binäre Ausgabe 1.x installieren möchte, wird auf die Anweisungen auf der offiziellen Homepage von Ant unter http://jakarta.apache.org/ant im Internet verwiesen. Die Datei, die man heruntergeladen hat, entpackt man nun an den Installationsstandort und schon hat man Ant auf seinem Unix oder Windows System. Die Verzeichnisstruktur sieht dann etwa so aus wie in Abbildung 1. Um zu laufen, braucht Ant zwar nur die bin und lib Verzeichnisse. Bevor Ant jetzt richtig läuft, müssen noch zwei Umgebungsvariablen gesetzt werden. ANT_HOME muss das Abbildung 1 Installationsverzeichnis von Ant enthalten, also das Verzeichnis, das die bin und lib Verzeichnisse enthält. JAVA_HOME muss das Installationsverzeichnis der Java Virtual Maschine enthalten. Um das Arbeiten mit Ant zu erleichtern, sollte man das ANT_HOME/bin Verzeichnis noch in der systemweiten Pfadvariable PATH aufnehmen. 2.2 Starten von Ant Wenn Ant richtig installiert ist, kann man es ganz einfach mit der Eingabe von ant auf der Shell starten. Wenn nichts weiteres angegeben ist, sucht Ant eine build.xml Datei im aktuellen Verzeichnis. Wenn es sie findet, startet Ant mit dieser Datei. Mit der find Option kann man Ant dazu anweisen, jeweils eine Stufe weiter oben im Verzeichnisbaum nach einer build.xml Datei zu suchen. Man kann auch eine andere XML Datei unter Anwendung der buildfile Option angeben, die für das Ausführen benützt werden soll. Eine wichtige Option ist noch die Dproperty=value um Properties in der Build-Datei anzugeben oder zu ändern. Dabei ist property der Name der Property, die gesetzt werden soll, und value der Wert, den sie erhalten soll. Auf die Property Task und ihre Benützung wird im Kapitel 3 noch eingegangen. Eine vollständige Liste der Optionen kann man in Anhang A einsehen. Im Allgemeinen hat der Aufruf von Ant folgende Struktur: ant [options] [target [target2 [target3]...]] Nach der Angabe von Optionen können auch noch Targets angegeben werden, die Ausgeführt werden sollen. Gibt man nichts an, wird der Default-Target, der in der Build-Datei angegeben ist, verwendet. Beim Starten von Ant wird zuerst ein Skript gestartet, dass, wenn vorhanden, noch ein weiteres Skript vor dem eigentlichen Starten von Ant aufruft. Beim Beenden führt dieses sogenannte Wrapper-Skript noch ein abschliessendes Skript aus, mit dem man aufräumen kann. Damit kann man Umgebungsvariablen setzen, die nur während dem Ablaufen von Ant aktiv sein sollen. Für genauere Angaben zum Vorgehen auf dem jeweiligen Betriebssystem wird auf die offizielle englische Dokumentation verwiesen. Thomas Gysi, ib99 11.12.01 Seite 5 / 13

2.3 Ant Benützen Um Ant zu benützen, muss man als erstes eine build.xml Datei für sein Projekt schreiben. Darauf wird in diesem Kapitel kurz eingegangen. 2.3.1 Die build.xml Datei Hier wird zusammenfassend die allgemeine Struktur der build.xml Datei gezeigt. Dieses Beispiel kann man als Startpunkt für seine ersten Schritte mit Ant benützen. <project name="myproject" default="dist" basedir="."> <!-- set global properties for this build --> <property name="src" value="."/> <property name="build" value="build"/> <property name="dist" value="dist"/> <target name="init"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile --> <mkdir dir=$"{build}"/> </target> <target name="compile" depends="init"> <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile"> <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/lib/myproject-${dstamp}.jar" basedir="${build}"/> </target> <target name="clean"> <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project> Dieses Beispiel findet man auch in der offiziellen Dokumentation von Ant, wo man sie einfachheitshalber kopieren kann. Thomas Gysi, ib99 11.12.01 Seite 6 / 13

3 Eingebaute Tasks, Konzepte und Typen Es gibt sehr viele eingebaute Tasks, die dem Designer der Build-Datei zur Verfügung stehen. In diesem Kapitel wird nur auf einen wichtigen, den Property Task, eingegangen. Im Anhang B befindet sich eine vollständige Liste aller Tasks, mit einer kurzen Beschreibung auf englisch. Eine genaue Beschreibung jedes Tasks ist in der offiziellen Dokumentation zu Ant zu finden. Nebst den Tasks gibt es auch vorgegebene Konzepte und Typen, an die man sich halten muss. Diese werden in 7 Gruppen eingeteilt. Directory-based Tasks: Ein Konzept für die Tasks, die auf Verzeichnisstrukturen basieren. build.sysclasspath: Ist ein Property der kontrolliert, wie der systemweite Klassenpfad Ant beim Ablaufen beeinflusst. Der Standardwert variiert von Task zu Task. Patternset: Wird benützt um, Muster für das Selektieren anzugeben. Fileset: Gruppiert mehrere Dateien zusammen. Filterset: Wird bei Tasks wie copy benützt, um ein Muster in einer Datei durch ein anderes Muster zu ersetzen. File Mappers: Werden bei Tasks wie javac benützt, um zu definieren, wie die Zieldateien aussehen sollen. Common Attributes: Die Attribute, die jeder Task hat: id (identifierer), taskname (ein anderer Name für den Task), description (Beschreibung). In diesem Kaptitel wird noch kurz beschrieben, wie man verschiedene Muster angeben kann, welche zum Beispiel im Patternset oder Fileset benutzt werden. 3.1.1 Der Property Task Mit diesem Task haben Entwickler die Möglichkeit, sogenannte Properties zu setzen. Diese können dann als Variablen in der ganzen Build-Datei benützt werden. Eine Property setzt man mit dem Property Task so: <property name="myproperty" value="foo"> Nach dem Setzen kann man die Property mit ${myproperty} ansprechen, so das dies in diesem Beispiel mit foo ersetzt würde. Nach diesem Muster kann man alle Standard Java System Properties wie java.version oder user.home verwenden, diese werden von Ant automatisch zur Verfügung gestellt. Properties können auch dadurch gesetzt werden, in dem man eine Datei, die die gewünschten Properties enthält oder eine Referenz, angibt. Ein Beispiel für die Benützung einer Property ist die Angabe einer Property bei einer if oder unless Anweisung, die ein Target, je nach Vorhandensein, eines Attributs ausführt. Anstelle des Attributs verwendet man dann den Namen der Property, die den Namen des Attributs enthält. 3.1.2 Wie man Auswahlmuster in Ant angibt Um mit Ant eine Auswahl von einem Verzeichnisbaum zu bilden, gibt es, wie unter Dos oder Unix, den * für null oder mehrere Zeichen, und das? für genau ein Zeichen. Für zusätzliche Flexibilität kann man noch ** benützen. Mit ** schliesst man alles, was unter dem Aktuellen Verzeichnis steht, mit ein, auch Thomas Gysi, ib99 11.12.01 Seite 7 / 13

alle Unterverzeichnisse. Zusammen mit der Möglichkeit include und exclude dazu zu verwenden, um speziell Dateien ein- beziehungsweise auszuschliessen, hat man mit Ant einen mächtigen Apparat, um genau die Dateien auszuwählen, die man möchte. Folgend noch ein Beispiel dazu: <fileset dir="${src}"> <include name="**/images/*"/> <exclude name="**/*.gif"/> </fileset> In diesem Beispiel schliesst man alle Dateien ein, die unter dem ${src} Verzeichnis in einem Verzeichnis Namens images liegen, inklusive alle Dateien, falls es sie gibt, unter dem ${src} Verzeichnis, die images heissen, aber nicht die Dateien die mit.gif enden. 4 Ant erweitern Ant kann man auf verschiedene Arten erweitern. Zu den eingebauten Tasks kann man zum Beispiel noch die optionalen Tasks installieren. Eine andere Möglichkeit ist die Erweiterung mit selbst geschriebenen Tasks. 4.1 Optionale Tasks Auf der Homepage von Ant stehen noch sogenannte Optional Tasks zur Verfügung, die zusätzliche Unterstützung bieten, was zum Beispiel das Internet anbelangt. Für eine vollständige Liste mit einer ausführlichen Erklärung zu jedem Task wird erneut auf die offizielle Dokumentation verwiesen. Als Beispiel für einen nützlichen optionalen Task ist an dieser Stelle der JUnit Task erwähnt, mit dem man zum Beispiel auch das Testen einer Applikation automatisieren kann, was sehr praktisch sein kann. 4.2 Eigene Tasks schreiben Um Ant ganz persönlich zu erweitern, kann man eigene Tasks schreiben. Dies ist gar nicht so schwierig, man muss dazu nur eine von org.apache.tools.ant.task abgeleitete Klasse erstellen, die für jedes mögliche Attribut eine entsprechende set-methode besitzt. Diese Methoden erhalten als Parameter den Wert ihres Attributes als String, bevor die execute-methode der Klasse aufgerufen wird. Eine Zeile, die folgendermassen aussieht, macht dann den neuen Task in der gesamten Build-Datei gültig: <taskdef name="mytask" clas sname="foo.bar.mytask"/> 5 Integration in IDE und Antidote Es gibt verschiedene Erweiterungen für IDEs die, von diversen Autoren geschrieben wurden, um Ant in sie zu integrieren. Eines dieser IDEs ist der bekannte JBuilder, die Integrationssoftware dazu heisst AntRunner, die man unter http://www.dieter-bogdoll.de/java/antrunner/ herunterladen kann. Zudem Thomas Gysi, ib99 11.12.01 Seite 8 / 13

gibt es ein Jakarta Projekt, das an einem GUI arbeitet, das das Arbeiten mit Ant durch eine grafische Oberfläche vereinfachen soll. Dieses Projekt heisst Antidote. Schluss Mit Ant können Entwickler plattformunabhängige Build-Dateien erstellen. Da diese im XML Format sind, ist die Syntax leicht zu erlernen und die Dateien erhalten eine übersichtliche Struktur. Die eingebauten Tasks erfüllen fast alle Anforderungen, die Java-Entwickler an ein Build Werkzeug stellen. Braucht man zusätzliche Tasks, gibt es die Optionalen, die anderer Entwickler oder man schreibt einfach seine eigenen und hat dabei die ganze Mächtigkeit von Java zur Verfügung. Ant wird Make für den Unix Benutzer, der C/C++ Programme schreibt, sicher nicht ablösen, aber für alle Java Entwickler wird es sicher das Build Werkzeug der Zukunft sein. Thomas Gysi, ib99 11.12.01 Seite 9 / 13

Bibliographie? Michael, Marr: Ant: Make-Alternative für Java; Fleisige Ameise. ix 2/2001 S. 56-58? Ant Hompage: http://jakarta.apache.org/ant/? Die offizielle Ant Dokumentation: http://jakarta.apache.org/ant/manual/index.html Thomas Gysi, ib99 11.12.01 Seite 10 / 13

Anhang A. Start Optionen Zusammenfassung der Optionen die beim starten von Ant angegeben werden können: ant [options] [target [target2 [target3]...]] Options: -help print this message -projecthelp print project help information -version print the version information and exit -quiet be extra quiet -verbose be extra verbose -debug print debugging information -emacs produce logging information without adornments -logfile file use given file for log output -logger classname the class that is to perform logging -listener classname add an instance of class as a project listener -buildfile file use specified buildfile -find file search for buildfile towards the root of the filesystem and use the first one found -Dproperty=value set property to value Thomas Gysi, ib99 11.12.01 Seite 11 / 13

B. Eingebaute Tasks Eine vollständige Liste aller eingebauter Tasks, ohne die deprecated Tasks, so wie sie in der offiziellen Dokumentation steht. Ant Runs Ant on a supplied buildfile. This can be used to build subprojects. AntCall Call another target within the same build-file optionally specifying some properties. AntStructure Generates a DTD for Ant buildfiles which contains information about all tasks currently known to Ant. Apply 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. Avalaible Sets a property if a resource is available at runtime. This resource can be a file, a directory, a class in the classpath, or a JVM system resource. Chmod Changes the permissions of a file or all files inside specified directories. Right now it has effect only under Unix. The permissions are also UNIX style, like the argument for the chmod command. Condition Sets a property if a certain condition holds true - this is a generalization of Available and Uptodate. Copy Copies a file or Fileset to a new file or directory. Cvs Handles packages/modules retrieved from a CVS repository. CVSPass Adds entries to a.cvspass file. Adding entries to this file has the same affect as a cvs login command. Delete Deletes either a single file, all files in a specified directory and its sub-directories, or a set of files specified by one or more FileSets. Dependset The dependset task compares a set of source files with a set of target files. If any of the source files is more recent than any of the target files, all of the target files are removed. Ear An extension of the Jar task with special treatment for files that should end up in an Enterprise Application archive. Echo Echoes a message to System.out or a file. 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. Fail Exits the current build (just throwing a BuildException), optionally printing additional info r- mation. Filter Sets a token filter for this project or read multiple token filter from an input file and sets these as filters. Token filters are used by all tasks that perform file copying operations through the Project commodity methods. FixCRLF Modifies a file to add or remove tabs, carriage returns, linefeeds, and EOF characters. GenKey Generates a key in keystore. Get Gets a file from a URL. GUnzip Expands a GZip file. GZip GZips a file. 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 Generates code documentation using the javadoc tool. Mail A task to send SMTP email. Mkdir Creates a directory. Also non-existent parent directories are created, when necessary. Move Moves a file to a new file or directory, or sets of files to a new directory. Parallel Parallel is a container task - it can contain other Ant tasks. Each nested task within the Patch PathConvert Property Record Replace Rmic parallel task will be executed in its own thread. Applies a diff file to originals. Converts a nested path, path reference, or fileset reference to the form usable on a specified platform and stores the result in a given property. Sets a property (by name and value), or set of properties (from file or resource) in the project. A recorder is a listener to the current build process that records the output to a file. Replace is a directory based task for replacing the occurrence of a given string with another string in selected file. Runs the rmic compiler for a certain class. Thomas Gysi, ib99 11.12.01 Seite 12 / 13

Sequential SignJar Sleep Sql Style Tar Taskdef Touch TStamp Typedef Unjar Untar Unwar Unzip Uptodate War Zip Sequential is a container task - it can contain other Ant tasks. The nested tasks are simply executed in sequence. Sequential's primary use is to support the sequential execution of a subset of tasks within the parallel task Signs a jar or zip file with the javasign command line tool. A task for sleeping a short period of time, useful when a build or deployment process requires an interval between tasks. Executes a series of SQL statements via JDBC to a database. Statements can either be read in from a text fileusing the src attribute or from between the enclosing SQL tags. Process a set of documents via XSLT. Creates a tar archive. Adds a task definition to the current project, such that this new task can be used in the current project. Changes the modification time of a file and possibly creates it at the same time. Sets the DSTAMP, TSTAMP, and TODAY properties in the current project based on the current date and time. Adds a data type definition to the current project, such that this new type can be used in the current project. Unzips a jarfile. Unzips a tarfile. Unzips a warfile. Unzips a zipfile. Sets a property if a target files are more up to date than a set of Source files. An extension of the Jar task with special treatment for files that should end up in the WEB- INF/lib, WEB-INF/classes or WEB-INF directories of the Web Application Archive. Creates a zipfile. Thomas Gysi, ib99 11.12.01 Seite 13 / 13