Artikel

 
Februar 2010 | Artikel

Ant 1.8: Die Ameise atmet noch

(Link zum Artikel: http://www.it-republik.de/jaxenter/artikel/2856)

Aktualisierung von Apache Ant steht bevor

Text: Markus Stäuble
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Das letzte Lebenszeichen von Apache Ant in Bezug auf Aktualisierung konnte man im Juli 2008 vernehmen. Zu diesem Zeitpunkt wurde der Wechsel von Version 1.7 auf Version 1.7.1 vollzogen. Die Version 1.7 lag zu diesem Zeitpunkt bereits knapp 1,5 Jahre zurück. Anscheinend hat sich dieser Zyklus von 1,5 Jahren eingependelt. Denn die Version 1.8 von Apache Ant steht nun 1,5 Jahre nach Version 1.7.1 vor der Tür. Das Release soll noch im ersten Quartal des Jahres erscheinen. Anlass für einen Blick auf die Neuerungen.

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:

  1. <extension-point name="prepare" depends="setup"/>
  2. <target name="setup">
  3. <echo message="setup ..." />
  4. </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:

  1. <target name="clean" depends="prepare">
  2. <echo message="cleaning output directory ..." />
  3. <delete dir="${dist}" />
  4. <mkdir dir="${dist}" />
  5. </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:

  1. <target name="extension" extensionOf="prepare">
  2. <echo message="extension" />
  3. </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:

  1. <property name="simple.enabled" value="" />
  2. <target name="simple" if="simple.enabled">
  3. <echo message="simple" />
  4. </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:

  1. <property name="simple.enabled" value="true" />
  2. <target name="simple" if="${simple.enabled}">
  3. <echo message="simple" />
  4. </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.

Markus Stäuble ist Senior IT-Consultant bei MRM Worldwide GmbH. Darüber hinaus spricht er auf diversen Konferenzen und ist Autor von Fachartikeln und Büchern.
  1. Apache Ant
  2. Neues von der Ameise: Apache Ant 1.7.1
  3. Release von Apache Ant 1.7.0
  4. Auf dem Weg zu ANT 1.8
  5. Behobene Bugs für Release 1.8
  6. Dokumention zu Apache Ant 1.8.0RC1
  7. What's New in Ant 1.8.0?
  8. Easyant
  9. Ant 1.8RC1 Call for vote


Anzeige

Kommentare

Gravatar Trepper 01.02.2010
um 13:21 Uhr
Angeblich hat der Erfinder von Ant mal gesagt, dass er es nachträglich für einen Fehler hält, dass Ant mit XML programmiert wird. Kennt jemand eine Quelle für dieses Zitat? #zitieren
Gravatar ramon98 01.02.2010
um 14:57 Uhr
http://web.archive.org/web/20040602210721/x180.net/Articles/Java/AntAndXML.html #zitieren
Gravatar Andreas Krey 04.02.2010
um 10:55 Uhr
Ah, well, so ziemlich alles an ant war eine Dummheit, wenn schon kein Fehler. Außerdem benutzt ant ja nichtmal konsequent xml, sondern noch kommaseparierte Listen und Propertysubstitutionen. Er hat also von Anfang an gemerkt, daß es nicht wirklich funktioniert. :-) Für das, was ant zu Anfang getan hat, wäre selbst ein simples Shellscript besser geeignet gewesen. Jetzt hängt leider ivy und Co. dran, so daß man nicht so leicht davon wegkommt. :-( Der volle Rant auf http://andreas-krey.blogspot.com/2009/01/ant-bad.html #zitieren

Anzeige

zurück zum Seitenanfang