Alfresco Maven

Alfresco propose depuis plusieurs mois de compiler ses projets avec maven. En réalité, Alfresco ne semble pas travailler avec maven, mais la communauté a poussé fortement pour mettre un dépôt maven en place.

Personnellement je ne suis pas un fanatique de maven, je trouve même que ça va à l’encontre du principe Keep It Simple que nous retrouvons dans les bons logiciels libres. Je préfère utiliser des scripts Ant, plus proche de MakeFile dans la logique.

Chose magique et fabuleuse, on peut utiliser le vrai intérêt de maven – la gestion des dépendances – dans ant, grâce à Apache Ivy !

Apache Ivy

Je ne vais pas reprendre la documentation d’Apache Ivy, le Quick Start est parfait. Rapidement il nous faut un fichier ivy.xml qui contient les dépendances de notre projet et une tache Ant pour télécharger les dépendances.

Ivy.xml

<ivy-module version="2.0">
	<info organisation="fr.jeci" module="alfresco-demo" />
	<dependencies>
		<dependency org="org.alfresco" name="alfresco-core" rev="4.2.e" />
		<dependency org="org.alfresco" name="alfresco-data-model" rev="4.2.e" />
		<dependency org="org.alfresco" name="alfresco-repository" rev="4.2.e" />
		<dependency org="org.alfresco" name="alfresco-web-client" rev="4.2.e" />
		<dependency org="org.alfresco" name="alfresco-share" rev="4.2.e" />
	</dependencies>
</ivy-module>
    <target name="resolve" description="--> retrieve dependencies with ivy">
        <ivy:retrieve />
    </target><

Si vous travailler avec Eclipse, vous pouvez également utiliser le module Apache IvyDE qui télécharge automatiquement vos dépendances et les ajoute à votre classpath.

Enfin grâce au classpathref on peut facilement compiler ou exécuter notre projet

    <path id="lib.path.id">
        <fileset dir="${lib.dir}" />
    </path>

    <target name="compile" depends="resolve" description="--> compile the project">
        <mkdir dir="${build.dir}" />
        <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="lib.path.id" includeAntRuntime="false" />
    </target>

Alfresco Ivy

Dans l’exemple ivy.xml ci-dessus, j’ai ajouté les modules principaux d’Alfresco, ces modules ne sont pas disponible sur les dépôts maven public. Nous devons configurer Ivy pour regarder dans le Nexus d’Alfresco.

Pour se faire on ajoute un fichier ivysettings.xml à la racine de notre projet.

ivysettings.xml

<ivysettings>
	<settings defaultResolver="alfresco" />
	<include url="${ivy.default.settings.dir}/ivysettings-public.xml" />
	<include url="${ivy.default.settings.dir}/ivysettings-shared.xml" />
	<include url="${ivy.default.settings.dir}/ivysettings-local.xml" />
	<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml" />
	<resolvers>
		<chain name="alfresco">
			<ibiblio name="alfresco-public"
				root="https://artifacts.alfresco.com/nexus/content/groups/public/"
				m2compatible="true" />
			<ibiblio name="alfresco-public-snapshots"
				root="https://artifacts.alfresco.com/nexus/content/groups/public-snapshots"
				m2compatible="true" changingPattern=".*SNAPSHOT" />
			<ibiblio name="codehaus" root="http://repository.codehaus.org"
				m2compatible="true" />
			<ibiblio name="javanet" root="http://download.java.net/maven/2/"
				m2compatible="true" />
			<resolver ref="public" />
		</chain>
	</resolvers>
</ivysettings>

Maintenant mes dépôts Git (et Subversion) sont beaucoup plus légers puisque je n’enregistre plus les librairies dans mes dépôts. (Pensez à ajouter “lib” dans votre .gitignore) je vous laisse reprendre vos cours de script Ant pour mettre en place la génération de modules AMP ou d’extensions Alfresco.

Si vous avez besoin d’aide je suis à votre disposition : info@jeci.fr