Ant - Das Apache Build-Werkzeug für Java

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


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Installation ] ... [ Grundlagen von Make ] ... [ Grundlagen von Ant ] ...

Übersicht : Grundlagen von Make


Makefiles

Um dem Make-System mitzuteilen, welche Aufgaben bewältigt werden sollen, muss man ein so genanntes Makefile erstellen. Darin gibt man Regeln an, aus welchen Quellen ein Ziel erstellt wird und welche Befehle dazu notwendig sind. Ein solcher Block aus Quel-len, Ziel und den Befehlen wird folgendermaßen aufgeschrieben:

Ziel : Quelle Quelle ...

	Befehl

	Befehl

Da in dem Befehlsteil beliebige Kommandos stehen können, hat Make keine Möglichkeit zu erkennen, ob es sich noch um Befehle oder den Beginn einer neuen Regel handelt. Um diese Unterscheidung zu ermöglichen, müssen Befehlszeilen immer mit einem Tabulator beginnen.
Bei gewöhnlichen Regeln betrachtet Make sowohl das Ziel als auch die Quellen als Da-teien, wobei die Zieldatei mit Hilfe der Befehle aus den Quelldateien erzeugt wird. Ein Beispiel:

Test.class : Test.java
	javac -d . Test.java

Mit dieser Regel mit dem Make-System gesagt, wie die Datei Test.class aus der Datei Test.java erstellt wird.


Ausführen bei Bedarf

Das reine Ausführen von Befehlen ist aber nicht Sinn und Zweck des Make-Systems. Eine Aneinanderreihung von Compiler-Aufrufen ließe sich mit einem Shell-Script bzw. einer Batch-Datei wesentlich schneller erledigen und würde keine zusätzlichen Programme erfordern. Das Besondere an Make ist, dass die Befehle einer Regel nur ausgeführt werden, wenn es wirklich notwendig ist. Hier kommen die Abhängigkeiten von Quellen und Zielen ins Spiel. Da man dem System mitgeteilt hat, von welchen Quellen ein bestimmtes Ziel abhängt, kann es anhand der Änderungsdaten von Quellen und Ziel feststellen, ob die Quellen nach dem letzten Erstellen des Ziels verändert wurden. Nur wenn dies der Fall ist werden die zu der Regel gehörenden Befehle ausgeführt.


Mehrere Regeln verbinden

In den meisten Fällen bestehen Programme aus mehreren Teilen, und nicht alle Teile müssen neu übersetzt werden, wenn sich eine Quelldatei geändert hat. Wenn z.B. mehrere Klassen in einer JAR-Datei zusammengefasst werden sollen und sich eine Klasse ändert, dann muss auch nur die geänderte Klasse neu kompiliert werden. Da es sich bei Quellen und Zielen für gewöhnlich um Dateien handelt, können die Quellen einer Regel gleichzeitig Ziel einer anderen Regel sein. Dadurch kann man ein Projekt in Unterprojekte aufteilen:

test.jar : a.class b.class c.class
   jar -cf test.jar a.class b.class c.class
a.class : a.java
   javac -d . a.java
b.class : b.java
   javac -d . b.java
c.class : c.java
   javac -d . c.java

Wenn nun die Datei test.jar neu erstellt werden soll, wird zuerst überprüft, ob eine oder mehrere der Quellen Regeln darstellen. Ist dies der Fall, werden zunächst diese Regeln überprüft und gegebenenfalls deren Befehle ausgeführt. Erst danach werden die Änderungsdaten von test.jar und den class-Dateien verglichen.


Aufruf

Wenn keine Parameter angegeben werden sucht Make im aktuellen Verzeichnis nach einer Datei, die makefile oder Makefile heißt. Die Entwickler von GNU Make empfehlen Makefile, da dieser Name in einem Verzeichnislisting normalerweise recht weit oben steht. Danach wird in der gefundenen Datei die erste Regel ausgeführt.
Mit den Parametern -f <Datei> bzw. --file <Datei> kann ein anderer Dateiname angegeben werden. Außerdem kann man angeben, welche Regeln ausgeführt werden sollen, indem man die entsprechenden Namen ans Ende der Parameterliste schreibt. Bei der Installation ist uns bereits make install begegnet. Hierbei wurde also nach der Datei makefile oder Makefile gesucht und die darin enthaltene Regel install ausgeführt.


... [ Seminar WS 2002/03 ] ... [ Ant ] ... [ Installation ] ... [ Grundlagen von Make ] ... [ Grundlagen von Ant ] ...