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!
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
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é)
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.







0 commentaires: on "Maven + Alfresco : Format de livraison"
Enregistrer un commentaire