Apr 15, 2016 4:05:48 PM Jon Harper avatar   1064    

Utilisation de Maven


Introduction


Maven Logo Le développement sous Lutece, notamment la construction et l'assemblage des composants, est basé sur l'outil Apache Maven (http://maven.apache.org). La très grande modularité de Lutece engendre nécessairement une complexité liée à l'assemblage des composants et à la gestion des dépendances. Cette complexité est gérée par le modèle proposé par Maven par le biais du Project Object Model. Afin de tirer le meilleur profit de cet outil, un plugin spécifique pour Lutece a été réalisé pour traiter les tâches complexes de construction et d'assemblage.

Le plugin Lutece pour Maven


Ce plugin Maven permet d'encadrer les tâches de développement et de distribution de Lutèce et de ses plugins. Il permet de plus de préparer des sites web en "assemblant" une version du noyau Lutèce et un certain nombre de plugins.

Les goals


Le plugin Lutece pour Maven introduit les goals suivants :

Nom Description
lutece:clean supprime le répertoire de build du projet.
lutece:exploded prépare une webapp de test pour un projet de plugin ou de site Lutèce.
lutece:package package un artifact "Lutece core" ou "Lutece plugin".
lutece:assembly génère les distributions sources et binaires pour un projet "Lutece core" ou "Lutece plugin".
lutece:site-assembly génère la distribution binaire pour un projet de site Lutèce.

Développement et tests d'un plugin


Tests manuels

Pour tester manuellement votre plugin dans un environnement contenant la webapp du coeur, appelez le goal lutece:exploded

mvn lutece:exploded

Cela va:

  • récupérer l'artefact lutece-core du repository Maven;
  • installer et préparer la version du coeur dans target/lutece ;
  • copier les composants spécifiques au plugin vers ce répertoire préparé;
  • copier tous les fichiers de configuration spécifiés (voir cette page ).

Suite à ce processus, target/lutece contient une instance de Lutèce avec votre plugin installé. Vous pouvez configurer le context de Tomcat sur ce répertoire pour commencer à tester.

Tests unitaires automatiques

Pour tester automatiquement le plugin (test unitaires), on peut utiliser la commande suivante:

mvn lutece:exploded antrun:run test

Cela va:

  • commencer par les opérations décrites dans l'étape précédente (test manuel).
  • effacer et réinitialiser une base de donnée.
  • lancer les test unitaires avec maven.

Note: les tests unitaires sont effectués en utilisant une base donnée par défaut: un serveur mysql sur localhost, base "lutece", utilisateur "lutece", pas de mot de passe. Il faut soit faire en sorte que cette configuration fonctionne, soit écrire une autre configuration dans le fichier "$HOME/lutece/conf/<ARTIFACT_ID>/WEB-INF/conf/db.properties", où ARTIFACT_ID est la valeur du fichier pom.xml (exemple: "lutece-core" pour le projet lutece-core, "plugin-document" pour le projet plugin-document, etc). Par exemple, le fichier suivant permet d'utiliser une base de donnée hsqldb embedded:

portal.poolservice=fr.paris.lutece.util.pool.service.LuteceConnectionService
portal.driver=org.hsqldb.jdbcDriver
portal.url=jdbc:hsqldb:file:target/LUTECE;shutdown=true
portal.user=sa
portal.password=
portal.initconns=2
portal.maxconns=5
portal.logintimeout=2000
portal.checkvalidconnectionsql=SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS

Création de distribution


Génération d'un distribution du plugin

mvn lutece:assembly

Cette commande va générer deux archives :

  • un ZIP contenant les sources du plugin
  • un ZIP contenant une version binaire du plugin pouvant être collée sur une webapp existante (le plugin devra être activé dans l'interface d'administration)

Génération d'une distribution du coeur

mvn lutece:assembly

Cette commande va générer deux archives :

  • un ZIP contenant les sources du coeur
  • un ZIP contenant :
  • un fichier WAR, d'une webapp du coeur, minimale, prête à être déployée et pouvant servir de base au déploiement de plugins (qui devront être activés dans l'interface d'administration).
  • les fichiers d'initialisation de la base de donnée

Note Dans le cas d'une webapp destinée à exploiter plusieurs plugins, il est conseillé de réaliser un site Lutèce.

Le mode multi-projets

Comme pour les plugins Lutèce , le multi projet Lutèce fournit un goal de déploiement local :

mvn lutece:exploded -P multi-project

Cela va:

  • installer et préparer le coeur dans target/lutece du multi projet;
  • installer et préparer chaque plugin dans target/lutece du multi projet;
  • copier tous les fichiers de configuration spécifiés (voir cette page ).

Suite à ce processus, target/lutece du multi projet contient une instance de Lutèce avec le coeur et tous les plugins installé. Vous pouvez configurer le context de Tomcat sur ce répertoire pour commencer à tester.

Pour pourvoir effacer et redéployer un multi projet en une seul commande, Contrairement à un projet classique on ne peut pas utiliser l'enchainement de commande suivant :

mvn clean lutece:exploded -P multi-project

Car cet enchainement, déploie tous les modules et fini par effacer le répertoire target du multi projet. On utilise l'enchainement de commande suivant :

mvn lutece:clean lutece:exploded -P multi-project

Afin d'éviter de recompiler et de redéployer tous les modules du multi projet, on a la possibilité de le faire seulement sur un seul module. Pour cela, ce placer directement dans le répertoire du module au niveau de son pom.xml et lancer la commande suivante :

  • pour les plugins :
mvn lutece:exploded -DtestWebappDirectory="../../target/lutece"
  • pour le coeur :
mvn lutece:exploded -DtestWebappDirectory="../target/lutece"

Autres commandes Maven utiles

Les projets Maven (dont Lutece) peuvent avoir une structure hiérarchique de fichiers pom.xml. La commande suivante permet de voir l'intégralité du pom.xml (effective pom).

help:effective-pom

Remove the project dependencies from the local repository, and optionally re-resolve them.

dependency:purge-local-repository

La commande suivante montre les différentes dependances entre les packages :

mvn dependency:tree -Dverbose

Pour analyser les dépendances sur le package org.apache.geronimo.specs:geronimo-stax-api_1.0_spec par exemple :

mvn dependency:tree -Dverbose -Dincludes=org.apache.geronimo.specs:geronimo-stax-api_1.0_spec

Générer la doc sans les rapports (plus rapide et n'essaie pas de se connecter à svn)

mvn site -DgenerateReports=false -Dmaven.test.skip=true

Remarque il faut allouer plus de mémoire à Maven pour générer les rapports via la variable d'env MAVEN_OPTS=-Xmx1024m