Apache Ivy

Apache Ivy Repository
Apache Ivy Repository

Apache Ivy ergänzt Apache Ant, um Abhängigkeiten zu Bibliotheken automatisch aufzulösen.

Die Auflösung von Abhängigkeiten ist auch ein Teil von Maven, für Ivy dagegen ist es die Hauptaufgabe die es mit einfachen Mitteln sehr effektiv erfüllt. Das Repository der Artefakte (Bibliothelen) ist ein ganz normales Verzeichnis (siehe Abbildung). Die Struktur ist hierarchisch in der Form:

  • Organisation
    • Modul
      • Revision
        • Artefakt(e)

MIt dieser Struktur lassen sich beliebig viele Bibliotheken (Module) in beliebig vielen Versionen aufbewahren. In letzten Verzeichnis der Version liegt eine XML mit den Informationen über das Modul sowie die Artefakte des Moduls. Die XML-Datei sieht z. B. wie folgt aus: 

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info
        organisation="org.postgresql"
        module="jdbc4"
        status="release"
        revision="9.0.0">
	</info>
	<publications>
		<artifact name="postgresql-jdbc4" type="jar" />
		<artifact name="org.postgresql.jdbc4" type="plugin" ext="jar" />
	</publications>
</ivy-module>

Neben den Artefakten, die nach Typ kategorisiert werden können, kann ebenso Abhängigkeiten zu weiteren Bibliothekten definiert werden. MIt Hilfe dieser XML-Dateien kann Ivy Module und dessen Abhängigkeiten finden.

Der Artefakttyp kann ein beliebiger Text sein. Die folgenden Typen sind gebräuchlich:

  • bin für ein Binärartefakt
  • src für ein Source-Artefakt
  • jar für ein JAR-File
  • dist für ein weitergebares Paket (z. B. ZIP)

Für die Eclipseentwicklung sind weitere Typen nützlich:

  • plugin für Eclipse Plug-ins und Fragmente
  • feature für Eclipse Features
  • product für Eclipse Produkte
  • sdk für ein SDK, also ein ZIP mit den Verzeichnissen plugins und features
  • updatesite für ein zusammengepackte Eclipse Update Site

MIt Hilfe des Attributs conf kann zwischen Artefakten für verschiedenen Konfigurationen wie linux, macosx und win32  unterschieden werden.

Damit Ivy Artefakte leicht finden kann wird die Verzeichnisstruktur mit Hilfe von Pattern beschrieben. Im Wurzelverzeichnis des Repository liegt zu diesem Zweck eine weitere XML-Datei.

Oben habe ich geschrieben Ivy ergänzt Ant. Dies tut es, in dem es neue Tasks bereitstellt. Die wichtigsten sind:

  • ivy:configure um ein Ivy-Repository bekannt zu machen.
  • ivy:resolve um die Abhängigkeiten des Projekts zu aufzulösen.
  • ivy:retrieve um die Abhängigkeiten aus dem Repository zu laden.

Damit Ivy die Abhängikeiten des Projekts auflösen kann, wird das Projekt mit Hilfe einer XML-Datei ivy.xml definiert.

<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info
        organisation="de.muspellheim"
        module="enterprise"
        status="integration">
	</info>
	<configurations>
		<conf name="linux" />
		<conf name="macosx" />
		<conf name="win32" />
	</configurations>
	<dependencies>
		<dependency org="org.eclipse" name="rcp" rev="3.7.0" conf="*->*" />
		<dependency org="org.eclipse" name="platform" rev="3.7.0" conf="*->*" />
		<dependency org="org.eclipse" name="delta-pack" rev="3.7.0" />
		<dependency org="org.apache" name="commons-cli" rev="1.2.0" />
		<dependency org="org.hibernate" name="hibernate" rev="3.6.7" />
		<dependency org="org.hsqldb" name="jdbc" rev="2.2.5" />
		<dependency org="org.postgresql" name="jdbc4" rev="9.0.0" />
	</dependencies>
</ivy-module>

Hier werden Metadaten zum Modul, wie Organisation, Modul-ID, Entwicklungsstatus genauso festgehalten wie die Modulabhängigkeiten.

Das zum als Überblick genügen. Die Details zum Einrichten und Nutzen eines Ivy-Repositories, möchte ich hier nicht wiederholen, weil sie in Tutorials und der Dokumentation von Ivy sehr gut beschrieben sind (siehe Links unten). 

Links

Zurück