Gestion des Properties et des Profils Maven

Lorsque l’on travaille sur des environnements différents, il peut être intéressant de paramétrer la construction de nos applications en se basant sur des propriétés pré-définies. Par exemple pour une application possédant une connexion à une base de données, les accès à cette base peuvent changer entre les postes de développement et le serveur de production. La gestion de profils avec Maven nous donne la possibilité de définir un ensemble de variables lors de la phase de Build qui seront accessibles par l’application via les Properties.

javamaven

Définition

Les Properties sont des variables inscrites dans les ressources de notre application. Elles sont accessibles à notre code Java et permettent de définir des constantes.

Les Profils selon Maven sont des situations définies par un ensemble de valeur. Par exemple, le profil « dev » va être défini par des identifiants de connexion très simples alors que le profil production va être plus poussé en terme de sécurité.

Objectifs

Le besoin de ces outils m’est venu dans une situation assez simple. Mon application Web Java nécessite une connexion à une base de données MongoDB. Je
développe sur une machine Linux avec une base de données locale. Sur mon serveur, sont présents Jenkins et Tomcat qui servent respectivement à l’intégration continue notamment avec l’exécution des tests unitaires et au déploiement de l’application. Sur le serveur j’avais donc besoin de deux bases de données distinctes, une pour l’intégration et l’autre pour la production sans avoir à changer systématiquement les paramètres dans mon code Java.

Dans cette situation, je vais donc définir trois profils:

  • dev : pour les phases de développement.
  • integration : pour que Jenkins puisse utiliser correctement les tests unitaires et une base de données destinée aux tests.
  • production : pour une utilisation par des acteurs externes.

Ces cas sont bien sûr relatifs à mon expérience sur un petit projet, le nombre de profils ne dépend que des besoins du projet!

Mise en place

Pom.xml

Afin de définir les profils, nous allons modifier le pom.xml et y décrire les profils avec leur valeur associée.

Fichiers : /pom.xml

Enfin, il faut indiquer à Maven de parcourir l’arborescence de notre projet et de filtrer les fichiers properties. Ce filtrage va permettre à Maven de remplacer les noms des variables définies dans les profils par leur valeur.

Database.properties

Les variables vont être stockées dans un fichier properties qu’il faut créer dans les ressources de notre projet.

Fichier : /src/main/resources/properties/database.properties

Lors du Build de notre application, Maven va donc filtrer les fichiers présents dans les ressources du projet. Il va remplacer toutes les chaînes comme celle-ci ${db.name} par les valeurs que nous avons définies.

Connection.java

Il faut maintenant accéder à ces variables depuis le Java.

Fichier : /src/main/java/eu/totoandco/rpresle/database/Connection.java

Commande Maven

Afin de lancer un Build avec un profil particulier, il suffit de rajouter l’argument -Pprofil à la commande.

Dans le cadre de mon utilisation de Jenkins, la commande utilisée est la suivante

 

Cette gestion de profils permet de très simplement gérer des projets sur plusieurs environnements et notamment des projets qui sont destinés à être exécutés sur plusieurs machines successivement.

spacer

Laisser un commentaire