Ant - Das Apache Build-Werkzeug für Java

Ein Vergleich mit dem Make-System
Simon Lembke (WI4139)


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Fehlerbehandlung ] ... [ Plattform(un)abhängigkeit ] ... [ Erweiterbarkeit ] ...

Übersicht : Plattform(un)abhängigkeit


Ant

Die Entwickler von Ant sind mit dem Ziel angetreten, ein plattformunabhängiges Build-Werkzeug zu schreiben, und das haben sie größtenteils auch geschafft. Natürlich muss auf dem System ein JDK vorhanden und lauffähig sein, doch da Ant hauptsächlich zum Erstellen von Java-Anwendungen eingesetzt wird, und auch diese dann zumindest die virtuelle Maschine benötigen, ist dieser Punkt wohl vernachlässigbar.
Die Plattformunabhängigkeit von Ant ergibt sich durch den Verzicht auf direkte Zugriffe auf Befehle eines betriebssystemspezifischen Kommandointerpreters. Die Funktionen des Dateisystems, das Kompilieren der Klassen und alle anderen Aufgaben werden in der virtuellen Maschine abgebildet. Dadurch muss man sich beim Verwenden der Tasks keine Gedanken über irgendwelche Architekturen machen. Es ist zwar möglich externe Programme auszuführen, dies ist aber meistens unnötig, da Ant mit Hilfe der Tasks bereits einen sehr großen Funktionsumfang hat. Wer dennoch nicht darauf verzichten kann oder will, legt sich damit zwangsläufig auf ein Betriebssystem oder eine Gruppe von Betriebsystemen fest.
Das Problem der Pfade bzw. der Pfad-Trennzeichen existiert in Ant nur bedingt. Attribute wie classpath akzeptieren verschiedene Schreibweisen und externen Programmen, die z.B. über einen exec-Task ausgeführt werden, kann man Pfade als Parameter übergeben, die Ant vor dem Aufruf automatisch an das lokale System anpasst.


Make

Was eigentlich ein sehr großer Vorteil von Make ist, nämlich den kompletten Funktionsumfang der jeweiligen Shell nutzen zu können, wird leider schnell zum Nachteil, wenn man ein Makefile auf unterschiedlichen Systemen einsetzen will. Dabei ist gar nicht primär entscheidend, welches Betriebsystem installiert ist, sondern welche Shell und welche zusätzlichen Befehle zur Verfügung stehen. Gerade zwischen Unix und Windows unterscheiden sich die einfachsten Befehle zum Kopieren oder Löschen von Dateien schon am Namen, von den möglichen Parametern ganz zu schweigen. Doch auch innerhalb von Betriebssystemgruppen kann es zu Problemen kommen. Während der Befehl „mkdir“ unter einigen Unix-Varianten die Option -p kennt, ist sie unter anderen Varianten nicht vorhanden.
Ein durchaus übliches Verfahren ist dabei die Auslieferung von mehreren Makefiles, aus denen der Anwender eines auswählen muss, dass seinem System am nächsten kommt. Dies bedeutet natürlich immer mehrfachen Pflegeaufwand und eine größere Fehleranfälligkeit. Es gibt einige Programme, die bestimmte Vorbedingungen auf dem jeweiligen System prüfen und das Makefile entsprechend anpassen. Aber auch hier muss der Entwickler vorher definieren, welche Aufgaben wie auf den verschiedene Systemen bewältigt werden können.
Auch beim Übergeben von Pfaden an die auszuführenden Befehle ergeben sich Probleme. Betrachtet man z.B. den classpath für den Java-Compiler, so müssen die einzelnen Verzeichnisse unter Windows durch ein Semikolon, unter Unix aber durch einen Doppelpunkt getrennt werden. Es ist daher zwar möglich, Make auf den unterschiedlichsten Systemen laufen zu lassen, die Entwicklung von universellen Makefiles aber gestaltet sich äußerst schwierig und ist teilweise sogar unmöglich.


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Fehlerbehandlung ] ... [ Plattform(un)abhängigkeit ] ... [ Erweiterbarkeit ] ...