Ant - Das Apache Build-Werkzeug für Java

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


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Größere Projekte (Fortsetzung) ] ... [ Fehlerbehandlung ] ... [ Plattform(un)abhängigkeit ] ...

Übersicht : Fehlerbehandlung


Fehler bei Make

Für jeden Befehl, der innerhalb einer Regel ausgeführt wird, startet eine Make eine eigene Shell und überprüft nach der Ausführung deren Rückgabewert. Wenn dieser ungleich 0 ist, bedeutet das für Make, dass ein Fehler aufgetreten ist. Normalerweise werden danach keine weiteren Befehle mehr ausgeführt, da das Ziel, ein Programm zu aktualisieren, nicht mehr möglich scheint.


Keep going

Besonders in großen Projekten, in denen das Kompilieren sehr viel Zeit in Anspruch nimmt, ist es manchmal wünschenswert, den Prozess trotzdem fortzusetzen, um weitere Fehler in anderen Quellen angezeigt zu bekommen. Dazu kann man Make mit dem Parameter -k bzw. --keep-going starten. In diesem Fall würde Make zwar die weiteren Befehle der aktuellen Regeln ignorieren, jedoch probieren, die restlichen Vorbedingungen zu erfüllen. Alle Regeln, die auf der gescheiterten Regel aufbauen, werden allerdings nicht mehr ausgeführt.
In manchen Fällen bedeutet die Fehlermeldung eines ausgeführten Programms nicht, dass das eigentliche Ziel nicht mehr erreicht werden kann. So wird man z.B. immer versuchen, das Verzeichnis, in dem die Klassen abgelegt werden sollen, vor dem Kompilieren zu erstellen. Sollte das Verzeichnis bereits existieren, wird ein Programm wie mkdir zwar einen Fehler melden, der Abbruch des Make-Prozesses ist aber wenig sinnvoll. Daher kann man Fehler von einzelnen Befehlen ignorieren lassen, indem man ihnen ein Minuszeichen vorsetzt.

-mkdir ${BUILDDIR}

Sollte nun beim Ausführen ein Fehler auftreten, so wird dieser zwar ausgegeben, er hat aber keinen Einfluss auf den weiteren Ablauf des Build-Prozesses.


Abbruch

Problematisch sind Unterbrechungen bei Make immer dann, wenn ein Programm bereits angefangen hat, die Zieldatei zu schreiben. Dadurch wurde das Änderungsdatum schon aktualisiert und ein weiterer Durchlauf von Make würde diese halb fertige Datei eventuell nicht aktualisieren. Daher löscht Make bei einem Abbruch von außen, z.B. per STRG-C, die Zieldatei, wenn sie ein aktuelles Änderungsdatum hat. Aus Kompatibilitätsgründen zu anderen Make-Varianten geschieht dies jedoch nicht, wenn Make durch einen Fehler abbricht. Man kann diese Funktion aber explizit einschalten, indem man eine Regel mit dem Ziel .DELETE_ON_ERROR in das Makefile einfügt.


Fehler bei Ant

Die Fehlerbehandlung in Ant ist den einzelnen Tasks überlassen. Viele von Ihnen haben dafür ein Attribut, über das man steuern kann, ob ein Fehler zum Abbruch des Build-Prozesses führen soll.

<javac srcdir=“${srcdir}“ destdir=“${builddir}“ failonerror=“false“ />

Wenn nun ein Fehler auftritt, der nicht unterdrückt werden soll, lösen die Tasks eine BuildException aus und die Ausführung von Ant wird abgebrochen. Leider gibt es noch keine Möglichkeit, eine keep going-Funktion wie unter Make zu aktivieren, es ist jedoch angedacht etwas Vergleichbares in Ant2 zu implementieren.


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Größere Projekte (Fortsetzung) ] ... [ Fehlerbehandlung ] ... [ Plattform(un)abhängigkeit ] ...