Wenn man schon etwas länger mit Java programmiert, dann hat man anfangs zum Bauen und Bereitstellen das Buildwerkzeug Ant genutzt und das Auflösen der Abhängigkeiten zu externen Bibliotheken (Dependy Management) wurde manuell erledigt. Der Nachfolger Maven konnte dies auch automatisieren, war aber in der ersten Version erschreckend langsam und so bin ich bis heute bei kleineren Projekten bei Ant geblieben.
Auf das automatisierte Dependency Management braucht man aber dank Ivy nicht zu verzichten. Das man auch größere Projekte damit stemmen kann zeigt das Groovy Web Framework Grails (auch wenn dies ab der Version 3 zu Gradle gewechselt ist).
Das folgende kleine Tutorial zeigt, wie man es in Eclipse einbindet.
Installation
Die Eclipse Integration installiert man am besten über die update site
Konfiguration
Die allgemeine Konfiguration erfolgt in ivysettings.xml. Hier wird auch die Kompatibilität zu Maven und der Zugriff auf dessen central Repositories festgelegt.
ivysettings.xml
<ivysettings> <settings defaultResolver="central"/> <resolvers> <ibiblio name="central" m2compatible="true"/> <filesystem name="local"> <artifact pattern="${ivy.settings.dir}/lib/[artifact]-[revision].[ext]"/> </filesystem> </resolvers> <modules> <module organisation="org.slf4j" resolver="local"/> <module organisation="junit" name="junit" resolver="local"/> </modules> </ivysettings>
In der Datei ivy.xml werden dann die Abhängigkeiten zu anderen Java Bibliotheken (z.B. commons-email aus dem Apache Projekt) deklariert.
<?xml version="1.0" encoding="UTF-8"?> <ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven"> <info organisation="de.koo" module="groovy-foo" revision="1.0" status="release" publication="20140417141428" > <description homepage=""> Groovy Examples (see https://github.com/gklinkmann/groovy-foo) </description> </info> <configurations> <conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/> <conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/> <conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/> </configurations> <dependencies> <dependency org="org.apache.commons" name="commons-email" rev="1.3.3" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/> </dependencies> </ivy-module>
Die Aktivierung erfolgt über Configure -> add Ivy Dependency Management. Danach kann man Ivy als Library in den Build Path aufnehmen.
Falls es Probleme bei der Auflösung der Abhängigkeiten geben sollte kann man den Resolution cache löschen und über
Resolve erneut anstoßen.
Bereitstellen
Zur Bereitstellung des Programms inklusive der externen Bibliotheken kann man Ivy in Ant einbinden. In dem nachfolgenden Beispiel werden die Resourcen innerhalb des prepare Target der ant build.xml in ein lokales lib Verzeichnis kopiert.
<target name="prepare"> <!-- enable, if you need a proxy <property name="proxy.host" value="change-to-prox-host"/> <property name="proxy.port" value="change-to-proxy-port"/> <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"/> --> <ivy:retrieve pattern="${lib.dir}/[artifact].[revision].[ext]" type="jar,bundle" sync="true" /> </target>