Automatisierte Abläufe mit Ant



Ähnliche Dokumente
ANT. Kurzvortrag von Manuel Schulze.

Das Build Tool Ant. Sebastian Mancke,

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

Software-Engineering Grundlagen des Software-Engineering

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

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

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

Das Build-Tool ANT ETIS SS05

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Kurzanleitung zu XML2DB

Einführung in die Informatik Tools

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Ant - das Java Build-Tool

25 Import der Beispiele

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

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

Stapelverarbeitung Teil 1

Durchführung der Datenübernahme nach Reisekosten 2011

Java: Vererbung. Teil 3: super()

Windows 7 Winbuilder USB Stick

Adminer: Installationsanleitung

Benutzung der Avid Liquid Edition Schnittplätze an der Universität Innsbruck

Artikel Schnittstelle über CSV

Step by Step Webserver unter Windows Server von Christian Bartl

Planung für Organisation und Technik

Übung: Verwendung von Java-Threads

Sicherer Datenaustausch mit EurOwiG AG

Applications Applets (eingeschränkte Rechte)

Inkrementelles Backup

Hardware - Software - Net zwerke

Connecting Content. User Manual. Version: 1.2

32.4 Anpassen von Menüs und Symbolleisten 795i

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Version 0.3. Installation von MinGW und Eclipse CDT

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Gezielt über Folien hinweg springen

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

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

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

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

LEHRSTUHL FÜR DATENBANKEN

Arbeiten mit UMLed und Delphi

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

Integration von SATA / RAID / SCSI Treibern in Windows XP Setup

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

GEONET Anleitung für Web-Autoren

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Anleitung über den Umgang mit Schildern

Automatische Installation (wenn das SSO-Applet nicht vorhanden ist)! Abbildung 1:Auswahldialog für Installationslaufwerk

C++ mit Eclipse & GCC unter Windows

Die Dateiablage Der Weg zur Dateiablage

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Das *z13-file Handling V1.0d

BAYERISCHES STAATSMINISTERIUM DES INNERN

Anleitung Captain Logfex 2013

TRIC DB Release 6.0. Refresh mit der Wiederherstellung der Produkte Siemens, Landis&Gyr und DEOS. für. Lizenznehmer der TRIC DB Version 6.0.

Barcodedatei importieren

Speichern. Speichern unter

Einführung in Javadoc

Anleitung zur Webservice Entwicklung unter Eclipse

Hex Datei mit Atmel Studio 6 erstellen

Erstellen der Barcode-Etiketten:

PROJEKTVERZEICHNIS EINRICHTEN

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Erstellen einer PostScript-Datei unter Windows XP

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

Dieser Artikel stammt aus dem Magazin von C++.de (

JBuilderX: Installation und Kurzanleitung (Windows)

Urlaubsregel in David

Schuljahreswechsel im Schul-Webportal

GameGrid mit BlueJ Seite 1

Leitfaden Installation des Cisco VPN Clients

Anleitung - Archivierung

Einstellen der Makrosicherheit in Microsoft Word

Hilfe zur Dokumentenverwaltung

Bedienungsanleitung. Stand: Copyright 2011 by GEVITAS GmbH

Internet und WWW Übungen

Es gibt einige Kardinalstellen, an denen sich auf der Festplatte Müll ansammelt: Um einen Großteil davon zu bereinigen.

Praktikum: Einstieg: Arbeitsplatz, JCreator

Datensicherung. Beschreibung der Datensicherung

AutoTexte und AutoKorrektur unter Outlook verwenden

Grafstat Checkliste Internetbefragung

Kleines Handbuch zur Fotogalerie der Pixel AG

PHPNuke Quick & Dirty

INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Quickstep Server Update

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Dokumentation HIS WebShop CDShop Modul v1.00 Seite 1/10. CDShop Modul v1.00. Dokumentations-Release

Schrittweise Anleitung zur Installation von Zertifikaten der Bayerischen Versorgungskammer im Mozilla Firefox ab Version 2.0

Erstellen einer digitalen Signatur für Adobe-Formulare

Stammdatenanlage über den Einrichtungsassistenten

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Druckerscriptsprache

Datenübernahme bei Umstieg von T-Online Banking 6 auf Quicken 2010 so wird s gemacht!

IBIS Professional. z Dokumentation zur Dublettenprüfung

Transkript:

Automatisierte Abläufe mit Ant U. Breymann H. Mosemann Ergänzendes Material zum Buch»Java ME«http://www.java-me.de Ant ist ein Programm zur Automatisierung von Abläufen [Ant]. Es entspricht (sehr) grob dem make-programm, dass in der C-Welt gebräuchlich ist. Ant benötigt eine Datei, in der die Steuerungsinformationen für den Ablauf stehen. Ant nimmt an, dass diese Datei build.xml heißt wenn nicht, muss Ant der Dateiname mit der Option -f übergeben werden, zum Beispiel -f datei.xml. Wie der Name andeutet, sind die Informationen im XML-Format hinterlegt. Hier soll an einem einfachen MIDlet, nämlich dem Beispiel aus dem Kapitel»Erste Schritte«, die Automatisierung der maschinellen Verarbeitung gezeigt werden. Ant ist ein praktisches und sehr mächtiges Werkzeug. Zum Einstieg und für die Arbeit mit Ant empfehlen wir das umfangreiche und dennoch gut lesbare Werk von Hatcher und Loughran [HaLo]. Eclipse enthält Ant und kann eine Ant-Build-Datei ausführen, so dass die Möglichkeiten der IDE dadurch erheblich erweitert werden. Eine Build-Datei enthält eine Menge zu erreichender Ziele. Zu jedem Ziel (engl. target) wird angegeben, mit welchen Aktionen es erreicht wird, und außerdem, welche andere Ziele vorher erreicht sein müssen. Die dazu notwendigen Aktionen werden ggf. ausgeführt. Beispiel: Das Packen von class-dateien mit jar (ein Ziel/Target) setzt voraus, dass erst die Java-Dateien erfolgreich compiliert worden sind (ein anderes Ziel). Am Anfang werden einige Namen im Stil der Java- Properties vereinbart. Zum Beispiel kann der Name ziel.verzeichnis den Wert dest bekommen. Ab diesem Punkt in der Datei kann der Wert überall mit ${ziel.verzeichnis eingesetzt werden. Der Vorteil ist, das nur die Definition des Namens verändert werden muss, sollte sich zum Beispiel der Name des Verzeichnisses ändern. Nun zu dem Beispiel der Build-Datei für das MIDlet-Projekt Projekt1, die Stück für Stück erläutert wird und die zusammen mit dem Beispiel auf der Internetseite zum Buch zu finden ist (http://www.java-me.de/): 1 <?xml version="1.0" encoding="iso-8859-1"?> 2 <project name="projekt1" default="jad" basedir="."> 3 <!-- einige Namen deklarieren --> 4 <!-- wtkhome --> 5 <property file="${user.home/build.properties"/> 6 <property file="build.properties"/> <!-- wtk.midpapi --> 1

7 <property name="wtklib" value="${wtkhome/lib"/> 8 <property name="projektname" value="projekt1"/> 9 <property name="packagename" 10 value="de.java_me.jme.beispiele.projekt1"/> 11 <property name="midlet" value="${packagename.erstesmidlet"/> 12 <property name="uri" <!-- URI für OTA-Zugriff: --> 13 value="http://localhost/~uli/jme/${projektname.jad"/> Zeile 1 ist der Beginn jeder XML-Datei 1. Der Wert iso-8859-1 des Attributs encoding gewährleistet, dass der XML-Interpreter nicht abstürzt oder abbricht, wenn die Datei Umlaute enthält. Zeile 2 definiert den frei wählbaren Projektnamen, das zu erreichende Ziel, falls kein anderes beim Aufruf angegeben wird, und das Arbeitsverzeichnis. Die Zeilen 3 und 4 sind XML-Kommentare und werden von Ant ignoriert. Anschließend werden zwei Property-Dateien eingelesen. In diesen stehen Properties und ihre Werte in einer einfachen Syntax, zum Beispiel: wtkhome=/home/uli/wtk wtklib=/home/uli/wtk/lib wtk.midpapi=${wtklib/cldcapi10.jar:${wtklib/midpapi20.jar Die folgenden Zeilen definieren weitere Namen, wobei in den Definitionen die vorhergehenden Namen mit Hilfe der Syntax ${Name benutzt werden. 14 <!-- Verzeichnisnamen und Pfade usw deklarieren --> 15 <property name="src" value="src"/> 16 <property name="build.dir" value="tmpclasses"/> 17 <property name="verified.dir" value="classes"/> 18 <property name="task.dir" value="anttasks"/> 19 <property name="jad.dir" value="jad"/> 20 <property name="deployed.dir" value="bin"/> 21 <property name="javadoc.dir" value="docs"/> 22 <property name="tmplib.dir" value="tmplib"/> 23 <property name="resource.dir" value="res"/> 24 <property name="compile.classpath" value="${wtk.midpapi"/> 25 <property name="execclasspath" value="${wtk.midpapi"/> Jetzt folgen die einzelnen Targets. Das Ziel init hängt von nichts ab. Es legt nur das Verzeichnis für die class-dateien an. Das Attribut description dient zur Dokumentation und zur Hilfe: Das Kommando ant -projecthelp (oder kurz ant -p) listet die Beschreibungen aller Ziele auf. 26 <target name="init" 27 description="build-verzeichnis erzeugen"> 1 Die Zeilennummern sind nicht Teil der Datei. 2

28 <mkdir dir="${build.dir"/> 29 </target> Das Ziel compile hängt von init ab, das heißt, wenn mit dem Befehl ant compile die Übersetzung angestoßen wird, wird automatisch vorher das Build- Verzeichnis mit init angelegt, falls es noch nicht existiert. Das Ziel zur Compilation definiert das Quellverzeichnis (und damit alle dazugehörigen Unterverzeichnisse) und weitere Parameter. javac ist eine fest eingebaute so genannte Ant-Task, die im Namen mit dem Aufruf des Java-Compilers übereinstimmt. 30 <target name="compile" depends="init" 31 description="alles compilieren"> 32 <javac srcdir="${src" destdir="${build.dir" debug="on" 33 bootclasspath="${compile.classpath" 34 source="1.3" 35 target="1.1"> 36 </javac> 37 </target> Boot-Classpath, Source- und Target-Version für Java sind unbedingt notwendig, damit das übersetzte Programm auf einem mobilen Gerät mit seinen Einschränkungen lauffähig ist. Weglassen dieser Parameter würde bedeuten, dass der Classpath und die Versionsnummer der aktuell benutzten Java SE verwendet würden. Die VM des Geräts unterstützt nicht, wie schon beschrieben, den Umfang der Java SE, sondern nur eine Teilmenge davon, und braucht überdies spezielle Bibliotheken. Ant muss alles mitgeteilt werden, was als Optionen auch für einen Kommandozeilenbefehl benötigt wird. Der Vorteile von Ant gegenüber einem Batch-Skript liegt unter anderem in der Definition der Abhängigkeiten. Im folgenden Ziel wird die Präverifikation durchgeführt. Dabei ist exec eine Ant-Task, die beliebige Programme aufrufen kann. Es können Argumente und Optionen übergeben werden. 38 <target name="verifizieren" depends="compile" 39 description="prä-verifikation durchführen"> 40 <mkdir dir="${verified.dir"/> 41 <exec executable="${wtkhome/bin/preverify"> 42 <arg value="-classpath"/> 43 <arg value="${execclasspath"/> 44 <arg value="-d"/> 45 <arg value="${verified.dir"/> 46 <arg value="${build.dir"/> 47 </exec> 48 </target> Auch das nächste Ziel, die Erzeugung einer Manifest-Datei, wird von einer fest eingebauten Ant-Task realisiert. Die Manifest-Datei wird für das ausführbare Java- Archiv, das im nächsten Schritt erzeugt wird, benötigt. 3

49 <target name="manifest" depends="verifizieren" 50 description="manifest erzeugen"> 51 <mkdir dir="${verified.dir/meta-inf"/> 52 <manifest file="${verified.dir/meta-inf/manifest.mf"> 53 <attribute name="manifest-version" value="1.0"/> 54 <attribute name="microedition-configuration" 55 value="cldc-1.0"/> 56 <attribute name="midlet-name" 57 value="${projektname Midlet Suite"/> 58 <attribute name="midlet-vendor" value="ub"/> 59 <attribute name="midlet-1" value="${projektname, 60 ${projektname.png, ${midlet"/> 61 <attribute name="midlet-version" value="1.0.0"/> 62 <attribute name="microedition-profile" value="midp-2.0"/> 63 </manifest> 64 </target> Das Packen aller class-dateien und aller Ressourcen-Dateien übernimmt die Ant- Task jar. Eine Liste von filesets gibt an, welche Dateien einzuschließen sind: 65 <target name="packen" depends="manifest" 66 description="als jar-datei packen"> 67 <mkdir dir="${tmplib.dir"/> 68 <jar destfile="${tmplib.dir/${projektname.jar" 69 manifest="${verified.dir/meta-inf/manifest.mf"> 70 <fileset dir="${verified.dir"> 71 <include name="**/*.class"/> 72 </fileset> 73 <fileset dir="${resource.dir"> 74 <include name="**/*"/> 75 </fileset> 76 </jar> 77 </target> Es gibt eine Menge vordefinierter Ant-Tasks, aber das reicht manchmal nicht. Es muss eine jad-datei erzeugt werden, die die Größe der jar-datei nach dem obfuscate-prozess enthält. Ant bietet die Möglichkeit, eigene Programme als Ant- Task zu schreiben, die als jar-datei zur Ausführung gebracht werden. Das nächste Ziel erledigt das Übersetzen und Packen einer Ant-Task, die die jad-datei erzeugt. Der Quellcode dieser selbstgeschriebenen Ant-Task und einige Erläuterungen folgen auf Seite 7. 78 <target name="maketask" depends="init" 79 description="ant-tasks erzeugen"> 80 <javac srcdir="${task.dir" destdir="${task.dir" debug="on"> 81 </javac> 4

82 <jar destfile="${task.dir/makejad.jar" 83 manifest="${task.dir/manifest.mf"> 84 <fileset dir="${task.dir"> 85 <include name="**/*.class"/> 86 </fileset> 87 </jar> 88 </target> Als nächstes folgt das Ziel obfuscate zum Ersetzen aller Klassennamen mit Ausnahme der Haupklasse und Komprimierung. Die Ant-Task java startet den Proguard-Obfuscator. Das Attribut fork muss auf true gesetzt werden, damit zum Starten eine neue Instanz der VM verwendet wird. 89 <target name="obfuscate" depends="packen" 90 description="obfuscate mit proguard"> 91 <mkdir dir="${deployed.dir"/> 92 <java jar="${wtkhome/bin/proguard.jar" 93 failonerror="true" 94 fork="true"> 95 <arg value="-libraryjars"/> 96 <arg value="${execclasspath"/> 97 <arg value="-injars"/> 98 <arg value="${tmplib.dir/${projektname.jar"/> 99 <arg value="-outjar"/> 100 <arg value="${deployed.dir/${projektname.jar"/> 101 <arg value="-keep public class * extends 102 javax.microedition.midlet.midlet"/> 103 </java> 104 </target> Das Ziel jad erzeugt die jad-datei sowie die html-datei für den OTA-Zugriff mit Hilfe der selbstgeschriebenen Ant-Task. Nach der Taskdefinition wird die Task aufgerufen, wobei ihr hier drei Parameter mitgegeben werden, die sie zur Erfüllung der Aufgabe benötigt. 105 <target name="jad" depends="obfuscate,maketask" 106 description="jad- und html-datei erzeugen"> 107 <taskdef name="makejad" classname="makejad" 108 classpath="${task.dir/makejad.jar"/> 109 <makejad projektname="${projektname" 110 manifestdir="${verified.dir/meta-inf" 111 destdir="${deployed.dir"/> 112 </target> Das Target install kopiert alle für einen OTA-Zugriff benötigten Dateien in das Verzeichnis public_html/jme des Benutzers und macht diese Dateien damit öffentlich zugreifbar. Das Verzeichnis muss dem Web-Server bekannt sein. 5

113 <target name="install" depends="jad" 114 description="kopiere jad, jar und html nach public_html/jme"> 115 <copy todir="${user.home/public_html/jme"> 116 <fileset dir="${deployed.dir"/> 117 </copy> 118 </target> Das Target run startet mit Hilfe der schon oben verwendeten Ant-Task exec den Emulator. Das Target runota startet den Emulator, indem der OTA (Over the Air)- Mechanismus simuliert wird. Der Web-Server muss dazu gestartet sein, auch müssen die MIME-Typen wie beschrieben konfiguriert worden sein. Das MIDlet darf noch nicht installiert worden sein. 119 <target name="run" depends="jad" 120 description="midlet im Emulator laufen lassen"> 121 <exec executable="${wtkhome/bin/emulator"> 122 <arg value="-xdescriptor"/> 123 <arg value="${deployed.dir/${projektname.jad"/> 124 <arg value="-classpath"/> 125 <arg value="${deployed.dir/${projektname.jar"/> 126 </exec> 127 </target> 128 129 <target name="runota" depends="jad" 130 description="midlet von localhost in den Emulator laden 131 und laufen lassen"> 132 <exec executable="${wtkhome/bin/emulator"> 133 <arg value="-xjam:transient=${uri"/> 134 </exec> 135 </target> Der Vollständigkeit halber folgt das Target javadoc zum automatisierten Erstellen der Dokumentation. 136 <target name="javadoc" depends="compile" 137 description="java-dokumentation erzeugen"> 138 <mkdir dir="${javadoc.dir"/> 139 <javadoc author="true" 140 destdir="${javadoc.dir" 141 private="false" 142 packagenames="${packagename.*" 143 sourcepath="src" 144 classpath="${compile.classpath"> 145 </javadoc> 146 </target> 6

Das letzte Ziel clean ist zum Aufräumen da alle temporären Verzeichnisse werden gelöscht. Nicht existierende Verzeichnisse werden ignoriert. 147 <target name="clean" 148 description="temporäre Verzeichnisse löschen"> 149 <delete dir="${build.dir"/> 150 <delete dir="${verified.dir"/> 151 <delete dir="${javadoc.dir"/> 152 <delete dir="${tmplib.dir"/> 153 <delete dir="${deployed.dir"/> 154 </target> 155 156 </project> <!-- Ende des Ant-Skripts --> 0.0.1 Ant-Task selbst schreiben Die Ant-Task MakeJad erzeugt die jad-datei aus der Manifest-Datei. Es werden nur der MIDlet-jar-Dateiname und die Größe der jar-datei hinzugefügt. Eine Ant- Task genügt folgenden Bedingungen: Sie erbt von org.apache.tools.ant.task. Es muss für jeden übergebenen Parameter (siehe Aufruf oben) eine entsprechende set...(string)-methode geben. org.apache.tools.ant.buildexception hilft Ant, bei Fehlern mit einer aussagekräftigen Meldung abzubrechen. Es muss eine Methode public void execute() geben. Dies ist die Methode, die im Build-Prozess aufgerufen wird. import org.apache.tools.ant.task; import org.apache.tools.ant.buildexception; import java.io.*; public class MakeJad extends Task { private String manifestdir= null; private String destdir= null; private String projektname = null; public void setmanifestdir(string d) { manifestdir = d; public void setdestdir(string z) { destdir = z; 7

public void setprojektname(string z) { projektname = z; public void erzeugehtmldatei() { String ausgabe = destdir + "/" + projektname + ".html"; PrintStream ps = null; try { ps = new PrintStream(new FileOutputStream(ausgabe)); ps.print("<html><head><title>"); ps.print(projektname); ps.print("</head><body>\n<a href=\""); ps.print(projektname); ps.print(".jad\">"); ps.print(projektname); ps.println(".jad</a>\n</body></html>"); System.out.println(ausgabe + " erzeugt"); catch(ioexception e) { throw new BuildException("Task makejad: " + "erzeugehtmldatei(): IOException!"); finally { if(ps!= null) ps.close(); public void erzeugejaddatei() { // zuerst Manifest-Datei kopieren StringBuffer sb = new StringBuffer(); String quelle = manifestdir + "/MANIFEST.MF"; FileInputStream fi = null; try { fi = new FileInputStream(quelle); catch(ioexception e) { System.out.println("Datei " + quelle + " kann nicht geöffnet werden!"); System.exit(1); PrintStream ps = null; try { // Manifest-Datei lesen int einbyte = fi.read(); while(einbyte!= -1) { sb.append((char)einbyte); einbyte = fi.read(); fi.close(); 8

String temp = sb.tostring(); /* Berücksichtigen, dass entsprechend der Definition von Manfest-Dateien eine Zeile mit mehr als 72 Zeichen in der nächsten Zeile, die dann mit einem Leerzeichen beginnt, fortgesetzt wird. D.h., solcher Art Zeilenumbrüche beseitigen: */ String zeilen = temp.replaceall("\r\n ",""); String ausgabe = destdir + "/" + projektname + ".jad"; ps = new PrintStream(new FileOutputStream(ausgabe)); ps.print(zeilen); ps.print("midlet-jar-url: "); String jarfilename = projektname + ".jar"; ps.println(jarfilename); File jarfile = new File(destDir + "/" + jarfilename); if(!jarfile.exists()) { throw new BuildException("Task makejad: " + jarfilename + " existiert nicht"); ps.print("midlet-jar-size: "); ps.println(jarfile.length()); System.out.println(ausgabe + " erzeugt"); catch(ioexception e) { throw new BuildException("Task makejad: " + "erzeugejaddatei(): IOException!"); finally { if(ps!= null) ps.close(); public void execute() { if(destdir == null) { throw new BuildException("Task makejad: Attribut " + "destdir nicht definiert!"); if(manifestdir == null) { throw new BuildException("Task makejad: Attribut " + "manifestdir nicht definiert!"); if(projektname == null) { throw new BuildException("Task makejad: Attribut " + "projektname nicht definiert!"); 9

erzeugejaddatei(); erzeugehtmldatei(); Literatur [Ant] Ant Homepage, http://ant.apache.org [HaLo] Erik Hatcher, Steve Loughran: Java Development with Ant. Manning 2003