4 nov. 2021 15:23:11 Thomas Dumont avatar

Utilisation de Maven

Introduction

Maven Logo Le développement sous Lutèce, notamment la construction et l'assemblage des composants, est basé sur l'outil Apache Maven. La très grande modularité de Lutèce 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 (POM). 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 Lutèce pour Maven

Le plugin Lutèce 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 Core 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.

Création d'une webapp de test

Webapp mono-projet

Pour tester manuellement le plugin développé, dans une webapp Lutèce, utiliser 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 Core dans le dossier target/lutece.
  • copier les composants spécifiques au plugin vers ce répertoire.
  • copier tous les fichiers de configuration spécifiés.

Suite à ce processus, le dossier target/lutece contient une instance de Lutèce avec votre plugin installé.

Webapp multi-projets

Lorsque les développements en cours concernent plusieurs composants, la construction d'une webapp de test nécessite de récupérer ces composants localement. Ceci peut-être réalisé de deux manières :

  • En plaçant les composants dans le dépôt Maven local.
  • En utilisant un projet parent multi module ayant ces composants comme modules.

Utilisation du dépot maven local

Un composant peut être pousser dans le dépot Maven local en invoquant la phase maven install :

$ mvn install

Une fois la commande exécutée la nouvelle version du composant sera disponible pour la construction de webapp avec les goals du plugin Lutèce Maven (lutece:exploded ou lutece:site-assembly).

Utilisation d'un projet multi-module

Voir Fonctionnement de lutece-maven-plugin partie Utilisation du Maven Reactor (multi module) pour savoir comment utiliser un projet multi-module avec le plugin Lutèce Maven.

Création de distribution

Génération d'une 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 Core

$ 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 Core, 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.

Autres utilisations de Maven

Obtenir des informations

Le plugin Maven Help permet d'obtenir des informations sur le projet ou le système.

La commande suivante permet par exemple de voir le POM construit par Maven à partir des POMs pris en compte par le projet (effective POM) :

$ mvn help:effective-pom

Initialiser la base de données

Sur les projets Lutèce construits avec le goal "lutece:exploded", le goal antrun:run permet l'initialisation de la base de données. Si la base de données existe alors elle est réinitialisée.

$ mvn antrun:run

La connexion avec celle-ci est configurée dans le fichier WEB-INF/conf/db.properties (voir Accès aux données).

Il est possible de surcharger le fichier db.properties du projet en passant un des arguments suivants dans la commande pour indiquer quel système de base de données utiliser :

  • -Dlutece-test-mysql
  • -Dlutece-test-postgresql
  • -Dlutece-test-hsql

En fonction du système de base de données choisi, le db.properties sera surchargé par le modèle de db.properties pour ce système. Des arguments falcultatifs peuvent être ajoutés pour configurer la connection avec la base de données (pour MySQL ou PostGreSQL uniquement) :

  • -Dlutece-antrun-db-host=XXX
  • -Dlutece-antrun-db-name=XXX
  • -Dlutece-antrun-db-user=XXX
  • -Dlutece-antrun-db-password=XXX

Les valeurs par défaut pour ces derniers arguments sont les suivants :

  • lutece-antrun-db-host : localhost,
  • lutece-antrun-db-name : lutece,
  • lutece-antrun-db-user : lutece,
  • lutece-antrun-db-password : motdepasse.

Exemples :

# crée une base hsql fichier dans target/
$ mvn lutece:exploded antrun:run \
    -Dlutece-test-hsql

# PostGreSQL
$ mvn clean lutece:exploded antrun:run \
    -Dlutece-test-postgresql \
    -Dlutece-antrun-db-user=postgres \
    -Dlutece-antrun-db-password=postgres

# MySQL distant
$ mvn clean lutece:exploded antrun:run \
    -Dlutece-test-mysql \
    -Dlutece-antrun-db-host=vm18:3307 \
    -Dlutece-antrun-db-user=user19 \
    -Dlutece-antrun-db-password=$3cr3t \
    -Dlutece-antrun-db-name=test29

Appliquer les tests unitaire

Pour tester automatiquement le plugin (tests 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.

Gérer les dépendances

Le plugin Maven Dependency apporte des goals permettant de gérer les dépendances des projets. Parmi ceux-ci on peut citer :

  • Le goal dependency:purge-local-repository qui permet de dupprimer les dépendances du projet dans le référentiel local et éventuellement de les résoudre de nouveau.

$ mvn dependency:purge-local-repository

  • Le goal dependency:tree montre les différentes dépendances entre les packages :
$ mvn dependency:tree -Dverbose
# see only the Lutece dependencies
$ mvn dependency:tree -Dverbose -Dincludes=fr.paris.lutece*
  • Le goal dependency:resolve liste les dépendances du site :
# list only the Lutece dependencies
$ mvn dependency:resolve -Dsort -DincludeGroupIds=fr.paris.lutece

Générer la documentation et les rapports de code

La phase site est utilisée pour construire un site maven contenant la documentation sur le projet courant et les rapports de code :

$ mvn site

On peut générer la documentation sans les rapports pour que l'opération soit plus rapide :

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

Voir aussi la documentation du plugin Maven Site pour plus d'informations.

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

Documentation Markdown

Un plugin Maven spécifique à Lutece permet de convertir la page d'accueil de la documentation au format xDoc (voir Normes de Documentation) en un fichier README.md au format Markdown utilisé par GitHub :

$ mvn xdoc2md:readme

Formater le code

Le plugin Maven Formatter permet de formater le code source suivant les règles du projet Lutèce :

$ mvn formatter:format

Mettre la licence Lutèce dans le code source

Le global POM fait référence au plugin License Maven qui permet d'ajouter ou de mettre à jour les licences dans les entêtes des fichiers sources.

Le plugin License Maven utilise le goal license:format pour ajouter ou mettre à jour la licence Lutèce dans les fichiers sources :

$ mvn license:format