Den Releasezyklen von Apache Ant merkt man an, dass dieses System doch schon in die Jahre gekommen ist. Trotzdem gibt es noch einiges zu tun für die Entwickler von Apache Ant. Die Zahl der behobenen Bugs für Version 1.8 nähert sich der 300er Grenze. Eine komplette Liste ist dem Projekt Bugzilla zu entnehmen. Neben den vielen Bugfixes sind drei Änderungen aufzuführen, die eine nähere Betrachtung benötigen:
- Definition eines Erweiterungspunktes zu einem Task
- Auswertungsmechanismus der Taskbedingungen (if und unless) geändert
- Einbindung von Build-Dateien zusätzlich über include (bisher nur mittels import)
Was ist neu?
Für den Aufbau von modularen Builds besteht die Möglichkeit, Abhängigkeiten zwischen einzelnen Tasks zu beschreiben. Das erfolgt über das Attribut depends auf dem Element target. Mit Ant 1.8 ist es nun auch möglich, zu einem Task einen ExtensionPoint (Tag: <extension-point>) zu definieren. Bei der Definition ist ein Name und eine Liste von Tasks (Attribut: depends) angegeben:
<extension-point name="prepare" depends="setup"/><target name="setup"><echo message="setup ..." /></target>
Zusätzlich zur Definition des ExtensionPoint muss nun noch ein Task mit diesem verbunden werden. Das geschieht einfach durch Aufnahme in die depends-Liste des entsprechenden Tasks:
<target name="clean" depends="prepare"><echo message="cleaning output directory ..." /><delete dir="${dist}" /><mkdir dir="${dist}" /></target>
Ohne weitere Definition würde bei der Ausführung von clean nun zunächst setup und dann clean ausgeführt. Das entspricht auch dem Verhalten bei Apache Ant 1.7.1.
Sobald aber eine Erweiterung definiert wird, schiebt sich diese in der Ausführungsreihenfolge dazwischen. Eine Erweiterung wird als normaler Task (Element: target) definiert. Über das Attribut extensionOf kann angegeben werden, zu welchem Erweiterungspunkt der Task gehört. Dieser Task wird intern nun einfach an die depends-Liste der Erweiterung angehängt:
<target name="extension" extensionOf="prepare"><echo message="extension" /></target>
Bei der Ausführung von clean ergibt sich folgende Taskreihenfolge: setup, extension und clean. Über die Attribute if und unless des Elements target ist es möglich, die Ausführung eines Tasks von der Existenz einer Property abhängig zu machen. Vor Ant 1.8 wurde lediglich geprüft, ob die Property gesetzt ist oder nicht:
<property name="simple.enabled" value="" /><target name="simple" if="simple.enabled"><echo message="simple" /></target>
Ab Ant 1.8 wird der Ausdruck ausgewertet, und wenn dieser true, yes oder on ist, wird der Task ausgeführt. Wenn der Ausdruck nicht diesen Wert ergibt, wird der alte Mechanismus angewendet. Sollte dieser auch negativ sein, erfolgt keine Ausführung des Tasks. Für den neuen Mechanismus muss der Ausdruck in ${} eingeschlossen sein:
<property name="simple.enabled" value="true" /><target name="simple" if="${simple.enabled}"><echo message="simple" /></target>
Mit dem Element include steht neben import nun ein zusätzlicher Mechanismus zum Einbinden von anderen Build-Dateien zur Verfügung. Die Dokumentation enthält einen extra Bereich, in dem die Unterschiede zwischen include und import erläutert werden. Zusammengefasst lässt sich sagen, dass bei der Überschreibung eines Tasks die Variante import zu wählen ist, ansonsten include. Bei include müssen die eingebundenen Tasks über einen Prefix angesprochen werden.
Erwähnenswert ist noch, dass der import-Task ab Version 1.8 auch Dateien über URL einbinden kann. Damit ist u. a. möglich, Dateien direkt aus JAR-Archiven einzubinden.
Eine zusätzliche Neuerung soll auch nicht verschwiegen werden: Mit Version 1.8 setzt Apache Ant nun Java in der Version 1.4 voraus.
Fazit
Wie zu erwarten, halten sich die Neuerungen bei Apache Ant in Grenzen. Wobei der Erweiterungsmechanismus ein weiterer Schritt nach vorne für modular aufgebaute Ant-Projekte ist. Beim Update darf nicht vergessen werden, dass es sich bei Ant 1.8 nicht um ein DropIn-Replacement handelt. Dies bezieht sich vor allem auf Projekte, die die Attribute if und unless bei der target-Definition einsetzen. Für die Projekte, die Ant Apache einsetzen, lohnt sich der Update aber schon alleine wegen der knapp 300 behobenen Fehler. Wie bei jedem Update des Build-Systems muss hier aber ordentlich getestet werden. Mal sehen, ob wir wieder 1,5 Jahre auf das nächste Update warten müssen.




