Die Ameise nähert sich Maven - JAXenter
Ivy 2.0.0: Neues Major Release des Dependency-Managers für Ant

Die Ameise nähert sich Maven

Markus Stäuble

Ein Punkt, der immer wieder als Migrationsgrund von Apache Ant zu Maven aufgeführt wird, ist das fehlende Dependency Management in Ant. Standardmäßig muss sich der Entwickler in Ant die notwendigen Bibliotheken selbst zusammensuchen und verwalten, wohingegen dies in Maven integraler Bestandteil ist. Mit Ivy steht ein mächtiger Dependency-Manager für Ant zur Verfügung. Am 20. Januar 2009 ist die Version 2.0.0 von Ivy erschienen. Grund genug, sich Ivy einmal genauer anzusehen.

Das letzte Release von Ivy war die Version 1.4.1, die im November 2006 erschienen ist. Nach etwas mehr als zwei Jahren ist nun ein neues Major Release erschienen, erstmals unter der Flagge eines Apache-Projekts. Die hauptsächlichen Änderungen der neuen Version sind:

  • Erweiterte Maven-2-Kompatibilität
  • Verbessertes Cache-Management
  • Packager-Resolver

Die Maven-2-Kompatibilität bezieht sich auf die Repositories der Artefakte. Mit Ivy 2.0.0 ist es problemlos möglich, auf Maven 2 Repositories zuzugreifen. Standardmäßig werden von Ivy auch Maven 2 Repositories verwendet. Eine vollständige Liste der Änderungen ist in den Release Notes zu Ivy 2.0.0 enthalten.

Installation leicht gemacht

Ivy 2.0.0 steht in insgesamt drei Varianten (siehe Tabelle) zur Verfügung. Für die Verwendung im eigenen Buildprozess reicht das binäre Release in Form von apache-ivy-2.0.0-bin.zip völlig aus. Die Voraussetzung für den Ablauf von Ivy 2.0.0 ist ein installiertes Apache Ant der Version 1.6.0 oder höher. Zusätzlich wird ein installiertes JDK der Version 1.4 oder höher benötigt.

Paket Beschreibung
apache-ivy-2.0.0-bin.zip Archiv mit Beispielen, Dokumentation und Ivy-Bibliothek
apache-ivy-2.0.0-bin-with-deps.zip Archiv mit Beispielen, Dokumentation und Ivy-Bibliothek und Bibliotheken, die für das Übersetzen von Ivy notwendig sind
apache-ivy-2.0.0-src.zip Archiv mit Beispielen, Dokumentation und Quelltext von Ivy

Tabelle 1: Downloadvarianten von Ivy 2.0.0

Die Installation besteht aus dem Extrahieren des heruntergeladenen Archivs in ein beliebiges Verzeichnis. Die Dokumentation befindet sich im Verzeichnis doc und die Beispiele im Verzeichnis src. Im Basisverzeichnis (Abb. 1) befindet sich Ivy in Form von ivy-2.0.0.jar.

Abb. 1: Das binäre Release entpackt
Integration in eigene Projekte leicht gemacht

Für den Einstieg in Ivy eignet sich das mitgelieferte Beispiel hello-ivy., das sich innerhalb des Verzeichnisses src/example/hello-ivy befindet. Das Projekt enthält neben einem herkömmlichen Ant Buildfile (Listing 1) auch eine Konfiguration der Abhängigkeiten in Form der Datei ivy.xml (Listing 2).

In Listing 1 ist zu sehen, dass Ivy mittels einer Antlib eingebunden wird. Die dafür notwendige XML-Datei (antlib.xml) befindet sich in der Bibliothek ivy-2.0.0.jar. Im beispielhaften Listing ist der Task ivy:retrieve aufgeführt, mit dem die notwendigen Abhängigkeiten angezogen werden.

Die verwendete Konfigurationsdatei (Listing 2) ivy.xml im Projekt hello-ivy enthält zwei Abhängigkeiten. Sollten Sie nach dem Namen für eine Abhängigkeit suchen, empfiehlt sich ein Blick in mvnrepository.com .

Das aufgeführte Beispiel ist nur ein kleiner Einblick in die Mächtigkeit von Ivy. Für einen tieferen Einblick ist die Dokumentation zu empfehlen.

Der Packager Resolver von Ivy 2.0.0

Auf den Packager Resolver von Ivy 2.0.0 soll kurz eingegangen werden, denn dessen Bedeutung erschließt sich nicht sofort. Ein Packager Resolver ist zuständig für den Zugriff auf ein Packager Repository. Solch ein Repository ist z. B. Ivy Roundup. Das besondere an solch einem Repository ist, dass hier keine Artefakte liegen, sondern lediglich Ausführungsanweisungen in Form einer packager.xml. Bei Verwendung eines Packager Resolvers wird die packager.xml heruntergeladen und mittels XSLT in ein Ant-Buildskript umgewandelt und ausgeführt. Beispielhaft ist in Listing 3 die packager.xml des Projekts Checkstyle aufgeführt.

Da der Prozess des Packager Resolvers relativ langsam ist, sollte hier unbedingt der Cache-Mechanismus von Ivy eingesetzt werden. Einsatzgebiete für den Packager Resolver sind Projekte, bei denen mehr als ein einfaches Archiv heruntergeladen werden muss. Damit ist es möglich zu beschreiben, wie die notwendigen Artefakte auf dem lokalen Rechner erzeugt werden können.

Lohnt es sich?

Wer nicht auf Maven umsteigen kann oder möchte, für den war Ivy schon immer eine Möglichkeit, zumindest das wichtige Dependency Management nachzurüsten. Durch die weiter verbesserte Möglichkeit, auf Maven2 Repositories zugreifen zu können, bleiben kaum Wünsche in Bezug auf das Management der Abhängigkeiten mehr offen. In den Release Notes von Ivy 2.0.0 wird jedem Benutzer einer älteren Version von Ivy empfohlen, auf die neue Version umzusteigen. Auch wer mit einem Umstieg auf Maven liebäugelt, könnte Ivy als Zwischenstation benutzen. Da es wahrscheinlich nur wenige Java-Projekte gibt, die keine externen Bibliotheken einsetzen, gibt es für Projekte mit Ant eigentlich keine Alternative zu Ivy. Das Problem des Managements der Abhängigkeiten können Sie daher getrost in dessen Hände legen.

Markus Stäuble ist CTO (Head of Technology) bei namics (deutschland) GmbH, einem führenden IT- und Web-Dienstleister. Darüber hinaus ist er freier Autor von Fachartikeln.

Geschrieben von
Markus Stäuble
Kommentare

Schreibe einen Kommentar

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