Interaktiver Build-Vergleich: Teil 1 - Apache Ant - JAXenter

Jan Matèrne über das Apache-Ant-Projekt

Interaktiver Build-Vergleich: Teil 1 – Apache Ant

In unserem interaktiven Vergleich zwischen den Build-Werkzeugen Maven, Ant und Gradle macht das Apache-Ant-Projekt den Anfang. Die Ursprünge von Ant liegen beim JSP- und Servlet-Container Tomcat. Nach der Übergabe der Tomcat-Codebasis von Sun an die Apache Software Foundation 1999 wurde schnell der übergreifende Nutzen der Ant-Lösung auch für andere Projekte erkannt. Zunächst im Einsatz in Jakarta- und Java-Apache-Projekte, wurde Ant als eigenständiges Projekt aus Tomcat herausgelöst und im Juli 2000 in einer ersten unabhängigen Version 1.1. veröffentlicht.

Ant (laut Projekt-Entwickler James Duncan Davidson Akronym für „Another Neat Tool“) war ursprünglich als einfaches, Plattform-unabhängiges Werkzeug konzipiert, um Tomcat-Builds anhand einer XML-Datei zu erstellen. Ausgehend von diesen bescheidenen Anfängen hat sich Ant weiter verbreitet als sein „Vater-Projekt“ Tomcat selbst und gilt heute als eines der beliebtesten Build-Werkzeuge im Java-Bereich.

Im interaktiven Build-Vergleich übernimmt Jan Matèrne die Rolle des Ant-Vertreters. Jan Matèrne beschäftigt sich seit 2000 mit Ant, ist seit 2003 Committer und seit 2004 Mitglied des Apache Ant PMC (Project Management Committee). Auf JAXenter ist er auch als Autor der aktuellen JAXenter-Serie „Der ANTwickler“ über die neueste Ant-Version 1.8 bekannt. In der ersten Runde der Vergleichsaktion stellt er sich den drei Fragen der JAXenter-Redaktion.

JAXenter: Hallo Herr Matèrne! Worauf wurde (und wird) bei der Entwicklung des ANT-Build-Systems besonderen Wert gelegt?

Jan Matèrne: Abwärtskompatibilität.

Ant wird auf unterschiedlichsten Systemen eingesetzt, von Maschinen, die seit Urzeiten laufen (und nicht aktualisiert werden (können)) bis zu neuen Rechnern. Daher ist das Hauptaugenmerk darauf gerichtet, sowohl alte Java-Versionen zu unterstützen als auch alte Buildfiles. Ant setzt erst seit der Version 1.8 auf Java 1.4! Das sollte nun doch überall vorhanden sein. Ansonsten müssten wir auf Ant 1.7.1, welches Java 1.3 voraussetzt, verweisen.

Der Nachteil davon ist leider, dass wir die aktuellen Sprachfeatures, welche gerade mit Java5 Einzug gehalten haben, nicht im Core-Bereich ausnützen können. Aber zu wissen, dass das eigene Programm quasi überall laufen kann, ist auch sehr angenehm.

Alte Buildfiles sollen auch mit neuen Ant-Versionen laufen. Bis auf wenige Ausnahmen haben wir das wohl erreicht und selbst alte Ant-1.3-Buildfiles funktionieren noch. Auch bereits geschriebene Tasks funktionieren mit neuen Versionen, was gerade im Hinblick auf die vielen existierenden Erweiterungen von Vorteil ist.

JAXenter: Wo sehen Sie die Stärken von ANT im Vergleich zu anderen Build-Systemen, insbesondere zu Maven und Gradle?

Jan Matèrne: Flexibilität, Offenheit.

Ich persönlich lese lieber ein Stück Code und weiß direkt, was gemacht wird. Ich kann mich durchsteppen und es von vorne bis hinten verstehen. Bei Systemen, die sehr viel unter der Haube machen, passiert es leicht, alles als „Magie“ zu bezeichnen, mit dem Effekt, bei Problemen nicht mehr weiterzuwissen.

Auch kann ich mit Ant durch leichte Änderungen meinen Build an die jeweiligen Bedürfnisse anpassen.

Interaktiver Build-Vergleich: Spielregeln

1. Runde: Wir stellen die drei selben kurzen Fragen an je einen Vertreter von Maven, Ant und Gradle.

2. Runde: Geben Sie über die JAXenter-Kommentarfunktion Ihr Feedback zurück an die Build-Experten!

3. Runde: Die Build-Experten reagieren auf Ihr Feedback und beantworten Ihre Fragen!

Darüberhinaus können Sie uns Ihre Erfahrungen mit den Buildtools auch anhand der folgenden Fragen mitteilen:

  1. Mit welchen Build-Systemen haben Sie in Ihrer Praxis bereits Erfahrungen gesammelt?
  2. Wo sehen Sie die Stärken Ihres bevorzugten Build-Systems?
  3. Wo sehen Sie Schwachpunkte der anderen Build-Systeme?
  4. Welche Fragen haben Sie an Matthew McCullough (zu Maven), Hans Dockter (zu Gradle) und Jan Matèrne (zu ANT)?

Beantworten Sie die Fragen als Kommentar zu diesem Artikel oder senden Sie Ihren Erfahrungsbericht direkt an die JAXenter-Redaktion!

Wir sind gespannt auf Ihr Feedback!

JAXenter: Was kann ANT von anderen Build-Systemen lernen?

Jan Matèrne: Depenency Management, Standardroutinen.

Mit Maven lassen sich ohne „großes Zutun“ Builds starten. Auch ein Dependency Management ist integriert.

Dank Maven hält das Dependency Management in Projekte Einzug, und es gibt einige bereits gut bestückte Repositories ebenso wie freie Repositorymanager. Hier bietet Ivy die Möglichkeit, dies in eigene Buildfiles zu integrieren. Ivy folgt dabei dem Grundgedanken von Ant, sehr flexibel zu sein. So lässt sich nicht nur konfigurieren, woher die Artefakte bezogen werden, sondern auch, wie Versionen aufzulösen sind, wie Konflikte behoben werden (Modul-A braucht Version 1 von C, Modul-B braucht Version 2) oder sogar, was Artefakte überhaupt sind (JAR-Dateien, XSDs, Word, …).

Maven bezieht seine Informationen, was es für ein Projekt tun soll, aus dem POM, dem Project Object Model. Hier finde ich es sehr gut, mit wenig Aufwand die Konfiguration abzuschließen. Alle Routinen basieren auf den hier getätigten Angaben. Bei Ant muss alles auf Task-Ebene konfiguriert werden. Diese Konfiguration lässt sich allerdings nicht ändern, ohne die Rückwärtskompatibilität aufzugeben. Aber mit „autoconf“ existiert bereits ein Prototyp zum Einführen von „Configuration-by-Exception“ in Ant. Die Standardroutinen, die Maven dann durchführt, sind in Plug-ins implementiert, wie beispielsweise das Erzeugen der Javadoc. Diese werden in der POM angegeben bzw. über die SuperPOM ererbt. Bei Ant könnte man sich in der Firma oder im Internet einen Satz an Standards definieren, die dann per <import> eingebunden werden.

Seit Ant 1.8 ist auch der Import von URLs möglich, wobei ich zwei Gefahren sehe: Ich bin von der Verfügbarkeit dieser URL abhängig, und ich muss dem Inhalt der URL vertrauen. Firmenintern mag das noch gehen, aber im Internet? Sogar die Apache-Server werden manchmal korrumpiert!

JAXenter: Vielen Dank für diese ersten Informationen. Weiter geht es nun mit dem Community-Feedback der Leser!

Geschrieben von
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.