O'Reilly Resource Center: Java
oreilly.deO'Reilly NetworkBücher, Konferenzen, Software, Online Publishing
KontaktBestellinfosOnline-Bücher

Pfeil Suche
Pfeil Bücher A-Z
Pfeil Neuerscheinungen
Pfeil Buchreihen
Programmbereiche
Pfeil
Bioinformatik
C/C++ Programmierung
Design & Grafik
Java
Linux
Macintosh
.Net
Open Source
Oracle
Perl
Python
Sicherheit
System- & Netzwerkadministration
Unix
Visual Basic
Web & Internet
Windows
XML
Weitere Infos
Pfeil
Katalog bestellen
Mailinglisten abonnieren
Archiv

Texas-KrötenechseFünf Ant-Tips aus der Praxis

von Stefan Edlich, Autor von Ant - kurz & gut



Mit den folgenden Tips möchte ich den an Ant interessierten Lesern einige der Erfahrungen aus meiner praktischen Arbeit mit diesem Build-Tool an die Hand geben. Ich hoffe, daß Ihnen diese Anregungen helfen, Ant besser zu verstehen und einzusetzen. In dem Bändchen Ant - kurz & gut finden Sie eine kurze Einführung in die Arbeit mit Ant und eine Task-Referenz. Wer sich tiefergehend mit Ant und mit Erfahrungen aus großen Projekten beschäftigen möchte, dem sei Ant: The Definitive Guide von Jesse Tilly & Eric Burke ans Herz gelegt.

Tip 1: Setzen Sie Optional Tasks, java und exec ein

Man kann in Ant nicht alle anfallenden Aufgaben mit Build-in Tasks erledigen. Bei komplexeren Projekten stößt man recht schnell an die Grenzen dieser Tasks. Oft hilft es hier, einen Blick auf die ständig wachsende Zahl von nützlichen Optional Tasks zu werfen, die beispielsweise die Arbeit mit JUnit und ftp ermöglichen. Mit dem Optional Task script können sogar in Programmiersprachen wie JavaScript, VBScript, Perl, TCL oder Python geschriebene Skripten ausgeführt werden (siehe dazu auch http://www-124.ibm.com/developerworks/projects/bsf).

Müssen keine oder nur wenige Informationen mit Ant ausgetauscht werden, bietet es sich an, Java-Programme mit dem Task java aus dem Buildfile heraus aufzurufen, oder auch Systemkommandos oder andere Programme wie z.B. Shell-Skripten mit dem Task exec. Die Ausgabe des aufgerufenen Programms können Sie über eine Property in Ihrem Buildfile weiterverwenden:

<exec dir="${src}" executable="cmd.exe"
os="Windows 2000" outputproperty="DIRCONTENT">
    <arg line="/c dir"/>
</exec>

Ansonsten bietet Ant Ihnen auch die Möglichkeit, eigene Tasks zu schreiben. Mehr dazu finden Sie im folgenden Tip.

Tip 2: Schreiben Sie eigene Tasks

 

 

Ausführliche Beschreibung

 

 

Da Ant ein einfaches Attributhandling über getter/setter-Methoden erlaubt, ist das Schreiben eigener Tasks wirklich einfach. Ihre Tasks müssen von der abstrakten Klasse org.apache.tools.ant.Task abgeleitet werden und die execute()-Methode implementieren. Wenn Sie ein Attribut XYZ übergeben wollen, müssen Sie eine setXYZ()-Methode schreiben, in der das Attribut gesetzt wird. Anschließend müssen Sie den Task im Buildfile nur noch über Taskdef bekannt machen, um ihn unter seinem Namen verwenden zu können. So einfach ist das. Beispiele dazu finden sich in meinem Buch oder im Web auf der Jakarta-Ant-Site.

Ant bietet hier aber noch mehr: Über das project-Objekt, auf das alle Tasks Zugriff haben, lassen sich gleichzeitig mehrere neue Properties setzen. Damit kann ein Task quasi mehrere Rückgabewerte haben.

Wenn Sie eigene Tasks geschrieben haben, sollten Sie überlegen, ob sie nicht auch für andere Entwickler interessant sein könnten, und sie ggf. der Open Source-Gemeinde zu Verfügung stellen (Posting, Webseite oder "Get Involved" auf der Jakarta-Ant-Site).

Tip 3: Lagern Sie Property-Definitionen aus

Auf den ersten Blick klingt das wie eine Selbstverständlichkeit. Es zeigt sich aber, daß fast alle Ant-Einsteiger Properties zunächst einmal in build.xml setzen. Bei umfangreicheren Projekten werden die XML-Files dann schnell unübersichtlich. Properties können nicht so einfach wiederverwendet werden und müssen oft mehrfach definiert werden, wenn man Buildfiles ausgelagert. Deshalb sollte jedes Buildfile mit der Anweisung

<property file="Dateiname"/>

beginnen. In dieser Datei werden nur die Namen der Properties und ihre Werte in der Form 'name=wert' angegeben. Außerdem können mit dem Zeichen # beginnende Kommentare einfügt werden. Eine Erläuterung der Properties ist hier viel einfacher und passender als in der XML-Datei.

Tip 4: Sorgen Sie für Wiederverwendbarkeit

Modularisieren Sie die Buildfiles. Das macht es nicht nur einfacher, Build-Dateien wiederzuverwenden, sondern erhöht auch die Lesbarkeit. Ab einer gewissen Größe werden Buildfiles so unübersichtlich, daß man schnell den Überblick verliert. Es gibt Buildfiles von über 40k (z.B. JBoss), meiner Ansicht nach nimmt aber die Lesbarkeit von ca. 10k an deutlich ab.

Mit der Anweisung

<ant antfile="subproject/property_based_subbuild.xml">
   <property name="param1" value="version 1.x"/>
...
</ant>

können andere Buildfiles aufgerufen werden. Wenn es erforderlich sein sollte, ist es auch möglich, ihnen spezielle Properties zu übergeben.

Die Wiederverwendbarkeit des Codes kann auch durch weitere Maßnahmen erhöht werden. So sollten Sie vermeiden, ähnliche Targets zu schreiben, wenn sie ähnliche Aufgaben zu erledigen haben. Versuchen Sie stattdessen, nur ein Target zu schreiben und dabei Parameter einzusetzen. Beispielsweise können Verzeichnisse als Parametervalue übergeben oder der Ablauf im Zieltarget mit Parametern durch if und unless gesteuert werden. Das Target kann dann auf folgende Weise mit den Parametern aufgerufen werden:

<antcall="targetName">
    <param name="pname" value="pvalue"/> ... 

Das hilft Code-Redundanzen zu vermeiden - und die Dateien werden kleiner.

Tip 5: Generieren Sie Ant-Code

Viele Aufgaben wie Kompilieren, Dokumentieren mit javadoc, Kopieren oder Löschen lassen sich gut standardisieren und automatisieren. Dazu ist es nicht immer notwendig, Buildfiles von Hand zu schreiben. Der benötigte Code kann oft auch durch Templates oder mit Hilfe anderer Programme (awk, sed, XSLT, selbstgeschrieben etc.) generiert werden. Mit der seit längerem angekündigten grafischen Oberfläche Antidote soll das Generieren von Buildfiles in Zukunft noch bequemer werden, aber es wird sicher bald auch andere Werkzeuge geben, die einem diese Aufgaben erleichtern.

Sie sollten sich allerdings genau überlegen, ob das Generieren von Buildfiles bei Ihrem Projekt tatsächlich sinnvoll ist. In der Regel eignet es sich vorwiegend für einfachere Aufgaben. Wenn man versucht, mit generiertem Code auch komplexere Aufgaben zu bewältigen, muß man häufig von Hand nachbessern. Dieses Nachbessern kann aufwendiger sein, als das Buildfile direkt von Hand zu schreiben.

Zum Schluß noch ein Hinweis

Ant-Logo
Sie sollten in Ant mehr als ein reines Build-Tool sehen. Ant kann auch bei anderen Aufgaben vor und nach dem eigentlichen Build eingesetzt werden. Es gibt viele Möglichkeiten, Ant außerhalb von reinen Java-Projekten einzusetzen, um z.B mit CVS auszuchecken, mit den verschiedenen EJB-Tasks (oder mit <java classname="myappserver.deploy" fork="yes" failonerror="yes">) EJB-Deployments durchzuführen oder mit dem mail-Task Maßnahmen zur Qualitätssicherung einzuleiten.

Sehen diese Seiten zu fade bzw. langweilig aus? Wenn ja, dann liegt das daran, daß unsere Seiten CSS verwenden! Entweder Ihr Browser unterstützt CSS nicht oder Sie haben CSS deaktiviert.
Netscape 4.x-Benutzer: Deaktivierung von JavaScript bewirkt leider, daß auch CSS deaktiviert ist!


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen
Kontakt | Über O'Reilly | Datenschutz

© 2002, O'Reilly Verlag
webmaster@oreilly.de