Guide des profils Maven

1. Vue d'ensemble

Les profils Maven peuvent être utilisés pour créer des configurations de build personnalisées , comme le ciblage d'un niveau de granularité de test ou d'un environnement de déploiement spécifique.

Dans ce didacticiel, nous allons apprendre à travailler avec les profils Maven.

2. Un exemple de base

Normalement, lorsque nous exécutons le package mvn, les tests unitaires sont également exécutés . Mais que faire si nous voulons empaqueter rapidement l'artefact et l'exécuter pour voir s'il fonctionne?

Tout d'abord, nous allons créer un profil sans tests qui définit la propriété maven.test.skip sur true:

 no-tests  true  

Ensuite, nous allons exécuter le profil en exécutant la commande mvn package -Pno-tests . Maintenant, l'artefact est créé et les tests sont ignorés. Dans ce cas, la commande mvn package -Dmaven.test.skip aurait été plus simple.

Cependant, ce n'était qu'une introduction aux profils Maven. Jetons un coup d'œil à quelques configurations plus complexes.

3. Déclaration des profils

Dans la section précédente, nous avons vu comment créer un profil. Nous pouvons configurer autant de profils que nous le souhaitons en leur donnant des identifiants uniques.

Disons que nous voulions créer un profil qui n'exécutait que nos tests d'intégration et un autre pour un ensemble de tests de mutation.

Nous commencerions par spécifier un identifiant pour chacun dans notre fichier pom.xml :

  integration-tests   mutation-tests  

Dans chaque élément de profil , nous pouvons configurer de nombreux éléments tels que les dépendances , les plugins , les ressources , le nom final .

Ainsi, pour l'exemple ci - dessus, on peut ajouter des plugins et leurs dépendances séparément pour les tests d'intégration et mutation tests .

La séparation des tests en profils peut accélérer la construction par défaut en la concentrant, par exemple, uniquement sur les tests unitaires.

3.1. Portée du profil

Maintenant, nous venons de placer ces profils dans notre fichier pom.xml , qui les déclare uniquement pour notre projet.

Mais, dans Maven 3, nous pouvons en fait ajouter des profils à l'un des trois emplacements:

  1. Les profils spécifiques au projet vont dans le fichier pom.xml du projet
  2. Les profils spécifiques à l'utilisateur vont dans le fichier settings.xml de l'utilisateur
  3. Les profils globaux vont dans le fichier global settings.xml

Notez que Maven 2 a pris en charge un quatrième emplacement, mais cela a été supprimé dans Maven 3.

Nous essayons de configurer les profils dans le pom.xml chaque fois que possible. La raison en est que nous voulons utiliser les profils à la fois sur nos machines de développement et sur les machines de construction. Utiliser le fichier settings.xml est plus difficile et sujet aux erreurs car nous devons le distribuer nous-mêmes dans les environnements de construction.

4. Activation des profils

Après avoir créé un ou plusieurs profils, nous pouvons commencer à les utiliser, ou en d'autres termes, à les activer .

4.1. Voir quels profils sont actifs

Utilisons l' objectif help: active-profiles pour voir quels profils sont actifs dans notre build par défaut:

mvn help:active-profiles

En fait, comme nous n'avons encore rien activé, nous obtenons:

The following profiles are active:

Eh bien, rien.

Nous les activerons dans un instant. Mais rapidement, une autre façon de voir ce qui est activé est d' inclure le plugin maven -help-plugin dans notre pom.xml et de lier l' objectif active-profiles à la phase de compilation :

   org.apache.maven.plugins maven-help-plugin 3.2.0   show-profiles compile  active-profiles      

Maintenant, commençons à les utiliser! Nous examinerons différentes manières.

4.2. Utilisation de -P

En fait, nous avons déjà vu un moyen au début, qui est que nous pouvons activer les profils avec l' argument -P .

Commençons donc par activer le profil de test d'intégration :

mvn package -P integration-tests

Si nous vérifions les profils actifs, avec la commande maven-help-plugin ou mvn help: active-profiles -P integration-tests, nous obtiendrons le résultat suivant:

The following profiles are active: - integration-tests

Dans le cas où nous souhaitons activer plusieurs profils en même temps, nous utilisons une liste de profils séparés par des virgules:

mvn package -P integration-tests,mutation-tests

4.3. Actif par défaut

Si nous voulons toujours exécuter un profil, nous pouvons en rendre un actif par défaut:

 integration-tests  true  

Ensuite, nous pouvons exécuter le package mvn sans spécifier les profils, et nous pouvons vérifier que le profil de test d'intégration est actif.

Cependant, si nous exécutons la commande Maven et activons un autre profil, le profil activeByDefault est ignoré. Ainsi, lorsque nous exécutons le package mvn -P mutation-tests, seul le profil de mutation-tests est actif.

Lorsque nous nous activons d'une autre manière, le profil activeByDefault est également ignoré comme nous le verrons dans les sections suivantes.

4.4. Basé sur une propriété

Nous pouvons activer les profils sur la ligne de commande. Cependant, il est parfois plus pratique qu'ils soient activés automatiquement. Par exemple, nous pouvons le baser sur une propriété système -D :

 active-on-property-environment   environment   

Nous activons maintenant le profil avec la commande mvn package -Denvironment .

Il est également possible d'activer un profil si une propriété n'est pas présente:

 !environment 

Ou nous pouvons activer le profil si la propriété a une valeur spécifique:

 environment test 

Nous pouvons maintenant exécuter le profil avec le package mvn -Denvironment = test.

Enfin, nous pouvons activer le profil si la propriété a une valeur autre que la valeur spécifiée:

 environment !test 

4.5. Basé sur la version JDK

Une autre option consiste à activer un profil basé sur le JDK exécuté sur la machine. Dans ce cas, nous voulons activer le profil si la version JDK commence par 11:

 active-on-jdk-11  11  

Nous pouvons également utiliser des plages pour la version JDK comme expliqué dans la syntaxe des plages de versions de Maven.

4.6. Basé sur le système d'exploitation

Alternativement, nous pouvons activer le profil en fonction de certaines informations du système d'exploitation.

Et si nous n'en sommes pas sûrs, nous pouvons d'abord utiliser la commande mvn enforcer: display-info qui donne la sortie suivante sur ma machine:

Maven Version: 3.5.4 JDK Version: 11.0.2 normalized as: 11.0.2 OS Info: Arch: amd64 Family: windows Name: windows 10 Version: 10.0

Après cela, nous pouvons configurer un profil qui n'est activé que sur Windows 10:

 active-on-windows-10   windows 10 Windows amd64 10.0   

4.7. Basé sur un fichier

Une autre option consiste à exécuter un profil si un fichier existe ou est manquant .

Alors, créons un profil de test qui ne s'exécute que si le testreport.html n'est pas encore présent:

  target/testreport.html  

5. Désactivation d'un profil

Nous avons vu de nombreuses façons d'activer les profils, mais parfois nous devons également en désactiver un.

Pour désactiver un profil, nous pouvons utiliser le '!' ou '-'.

Ainsi, pour désactiver le profil active-on-jdk-11 , nous exécutons la commande mvn compile -P -active-on-jdk-11 .

6. Conclusion

Dans cet article, nous avons vu comment travailler avec les profils Maven, afin de pouvoir créer différentes configurations de build.

Les profils aident à exécuter des éléments spécifiques de la construction lorsque nous en avons besoin. Cela optimise notre processus de construction et aide à donner des commentaires plus rapides aux développeurs.

N'hésitez pas à jeter un œil au fichier pom.xml terminé sur GitHub.