Tuxitecte

Maven + Alfresco : Format de livraison




Bonjour à tous !

Cette fois ci, il est temps de parler du format de livraison de votre projet. Vous me direz, il nous parle depuis plusieurs post du format AMP et maintenant il veut nous livrer autre chose ? C'est un peu ça... Suivant les projets, la distribution des rôles, les équipes et les bonnes pratiques de l'entreprise, le format de livraison va être simple ou bien très très complexe!

Prenons le cas classique, d'un côté une équipe de développement et de l'autre une équipe d'exploitation. Le premier est en charge de créer le produit, l'autre est en charge d'installer le produit et de vérifier qu'il fonctionne tout au long de sa durée de vie.

La question : Quel est le format d'échange du produit entre ces deux équipes ?
Ps : on ne tiendra pas compte ici de toute la documentation à fournir à l'équipe de production...

Listons un peu les différents cas possibles :
  • un (des) AMP(s) : Pour l'équipe de développement c'est le format le plus simple. En effet c'est le format de sortie de notre projet ! Il suffit donc de récupérer le fichier .amp et de l'envoyer ! Bien entendu si notre projet est constitué de plusieurs AMPs, on enverra l'ensemble des AMPs. Dans ce cas de figure, c'est l'équipe de production qui est en charge de générer le WAR de l'application en utilisant le script fourni par Alfresco.
  • un WAR : Ici, c'est l'équipe de développement qui a la responsabilité de créer le war. Ils doivent intégrer les différents modules dans le war Alfresco par défaut. L'équipe de production n'aura simplement qu'à installer l'application.
  • un WAR + AMP : Dans ce cas de figure, l'équipe de production demande à avoir l'application + les AMPs.
  • Autre : Ici vous pouvez inventer tout ce qui vous passe par la tête. Si vous travaillez dans des gros projets, ou dans des entreprises de grandes tailles, je pense que vous avez de très beaux exemples!
Comme vous pouvez le voir, les exemples ne manquent pas ! C'est même plutôt le contraire. La question que l'on se pose alors :
Comment créer ces nouveaux formats de distribution dans notre projet AMP ?.

L'idée comme d'habitude consiste à lancer une commande Maven et d'attendre le résultat attendu. Ne jamais oublier que le développeur est censé être un fainéant ^^ .

Dans les lignes ci-dessous, je vais vous présenter 2 approches pour générer autre chose que votre AMP. Ces approches se basent sur un nouveau projet Maven appelé alf-war-osecm.

Remarque : Cette approche n'est pas très conforme à la philosophie Maven mais effectue le travail désiré.

Création d'un nouveau projet AMP

Définir la structure

Créez un répertoire avec pour nom : alf-war-osecm
Ajoutez y un fichier pom.xml avec pour valeur


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
fr.opensourceecm
alf-war-osecm
pom
0.1
Alfresco AMP Open Source ECM
Open Source ECM - Extension




Intégrer l'outil dans un repository
Dans ce projet, on va utiliser le Module Management Tool d'Alfresco. Ce module est disponible dans le répertoire bin d'une installation standard Alfresco. Il est aussi disponible ici : http://wiki.alfresco.com/wiki/Community_Edition_file_list_3.3. Donc dans un premier temps, nous allons installer dans notre repository ce fichier avec la commande :

call mvn install:install-file -Dfile=alfresco-mmt.jar -DgroupId=org.alfresco.sdk -DartifactId=mmt -Dversion=3.3 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true


On effectuera cette commande, dans le répertoire où se situe notre fichier. Il nous sera ainsi possible de le retrouver via le mécanisme de dépendance maven classique.


Créer un nouveau WAR Alfresco
Maintenant, comme le titre l'indique, je souhaite générer un WAR avec l'ensemble des AMPs. Il faudra intégrer l'ensemble des AMPs dans un War Alfresco. Ce processus va se décomposer en 4 parties.
  • Définition des propriétés : Dans cette partie, on va initialiser des propriétés qui nous serviront au cours des autres parties.
  • Import des pré-requis : On va installer notre répertoire de travail avec le war et l'outil Alfresco.
  • Import des AMPs : Dans notre répertoire de travail, on va créer un sous-répertoire qui aura pour fonction de contenir l'ensemble des AMPs à intégrer.
  • Génération du war : Ici, on va lancer une ligne de commande pour intégrer les AMPs
  • (Optionnel) Installer dans un repository : Après la génération, on peut éventuellement ajouter une phase d'installation du war généré dans notre repository.

Définition des propriétés
On va définir 4 propriétés
  • work.dir : répertoire de travail
  • amps.dir : répertoire de dépôts des amps
  • mmt.jar : nom du fichier Module Management Tool
  • alfresco.war : Application Alfresco




livraison
amps
mmt.jar
alfresco.war



Import des pré-requis
Via le plugin maven-dependency-plugin nous allons réaliser le goal copy lors de la phase de prepare-package. Plus simplement, on veut copier un ensemble de dépendances (alfresco.war + outil Alfresco) dans notre répertoire de travail.


org.apache.maven.plugins
maven-dependency-plugin


war-copy-requisites
prepare-package

copy




org.alfresco.sdk
alfresco-community-war
3.3
war
${project.build.directory}/${work.dir}
${alfresco.war}


org.alfresco.sdk
mmt
3.3
jar
${project.build.directory}/${work.dir}
${mmt.jar}








Import des AMPs
Tout d'abord, on va ajouter un bloc dependencies à notre pom.xml. Dans notre cas, les dépendances de ce bloc seront :
  • fr.opensourceecm:alf-amp-osecm:amp:0.0.5
  • org.alfresco.sample:SDK-CustomWizard:amp:1.0
On aura ainsi dans notre pom.xml



fr.opensourceecm
alf-amp-osecm
0.0.5
amp


org.alfresco.sample
SDK-CustomWizard
1.0
amp





Ensuite, toujours via le plugin maven-dependency-plugin nous allons réaliser le goal copy-dependencies lors de la phase de prepare-package. Plus simplement, on veut copier l'ensemble des AMPs (défini en dépendance) dans un sous-répertoire de travail {amps.dir}.


org.apache.maven.plugins
maven-dependency-plugin


war-copy-amp
prepare-package

copy-dependencies


amp
${project.build.directory}/${work.dir}/${amps.dir}
false
true
true







Génération du war
Via le plugin exec-maven-plugin, nous allons réaliser le goal exec lors de la phase de package. Autrement dit, on veut réaliser le même comportement que le batch apply-amps.bat(ou .sh) mais via Maven.


org.codehaus.mojo
exec-maven-plugin
1.1


war-create
package

exec




java

-jar
${project.build.directory}/${work.dir}/${mmt.jar}
install
${project.build.directory}/${work.dir}/${amps.dir}
${project.build.directory}/${work.dir}/${alfresco.war}
-directory





Maintenant, il est possible de lancer la commande maven

mvn clean package


pour avoir dans le repertoire work.dir le fichier alfresco.war contenant l'ensemble des dépendances AMP définis dans notre pom.xml.

(Optionnel) Installer le war en local
Si vous souhaitez installer ce war dans votre repository local (et ainsi pouvoir créer des dépendances dans des buts de tests ou d'intégration), voici la configuration à ajouter dans votre phase de build :


org.apache.maven.plugins
maven-install-plugin
2.3


war-install
install

install-file


${project.build.directory}/${work.dir}/${alfresco.war}
${project.groupId}
${project.artifactId}
${project.version}
war
test
true
true






Avec la commande

mvn clean install

vous pouvez installer votre nouveau war. Bien entendu, vous pouvez modifier les différents paramètres pour correspondre à vos besoins...

Remarque : idem avec la phase deploy à quelques paramètres près... ^^



Créer un format de livraison personnalisé
Maintenant, nous allons nous intéresser à la création d'un format de livraison personnalisé. Dans mon cas, je souhaite
  • créer un fichier .zip avec
  • un dossier racine ..
  • un sous dossier amps contenant mes amps
  • un sous dossier application contenantt un alfresco.war (avec les amps déjà intégré)
Pour faire le travail, je vais utiliser le plugin maven-assembly-plugin. Ce plugin sert à créer des formats de distribution personnalisés. La configuration de ce plugin se fait en 2 temps : Création d'un fichier de description et Ajout dans le pom.xml

Création d'un fichier de description
Ce fichier de description définit le résultat attendu c'est à dire quels sont les répertoires à créer, les formats des fichiers, les droits, l'encoding... On peut en fait définir beaucoup de paramètres!
Dans notre cas, nous allons créer un fichier osecm-assembly.xml dans le répertoire alf-war-osecm\src\assembly. Ce fichier contiendra la configuration suivante :


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
production

zip

${project.groupId}.${project.artifactId}.${project.version}


target/${work.dir}
unix
/application

${alfresco.war}





/${amps.dir}

org.alfresco.sample:SDK-CustomWizard
fr.opensourceecm:alf-amp-osecm






Comme on peut le voir, il reprend la configuration attendue dans mon besoin.

Ajout dans le pom.xml
Maintenant, on doit définir dans le fichier pom.xml la déclaration de ce nouveau fichier. On ajoute donc le plugin maven-assembly-plugin avec pour configuration.



maven-assembly-plugin


src/assembly/osecm-assembly.xml





Lancer l'assemblage
Finalement, je peux lancer la commande Maven :

mvn clean assembly:assembly



pour assembler mon format de distribution. On retrouve ainsi dans le répertoire target le fichier alf-war-osecm-0.1-production.zip prêt à être envoyé !

Remarque : l'utilisation de ce plugin peut s'avérer être gourmand en mémoire. Pour résoudre ce problème augmentez les valeurs de MAVEN_OPTS dans vos variables d'environnements.
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

0 commentaires: on "Maven + Alfresco : Format de livraison"

Enregistrer un commentaire