Plugin Maven Enforcer

1. Vue d'ensemble

Dans ce tutoriel, nous allons en apprendre davantage sur le plugin Maven Enforcer et comment nous pouvons l'utiliser pour garantir le niveau de conformité de notre projet.

Le plugin est particulièrement pratique lorsque nous avons des équipes réparties, dispersées à travers le monde.

2. Dépendance

Pour utiliser le plugin dans notre projet, nous devons ajouter la dépendance suivante à notre pom.xml :

 org.apache.maven.plugins maven-enforcer-plugin 3.0.0-M2 

La dernière version du plugin est disponible sur Maven Central.

3. Configuration et objectifs du plugin

Maven Enforcer a deux objectifs: enforcer: enforce et enforcer: display-info.

L' objectif enforce s'exécute pendant la génération d'un projet pour exécuter les règles spécifiées dans la configuration, tandis que l' objectif display-info affiche les informations actuelles sur les règles intégrées présentes dans le pom.xml du projet .

Définissons l' objectif enforce dans la balise executions . De plus, nous ajouterons la balise de configuration qui contient les définitions de règles pour le projet:

...   enforce  enforce         ...

4. Règles de Maven Enforcer

Le mot-clé appliquer donne une suggestion subtile de l'existence de règles à respecter. C'est ainsi que fonctionne le plugin Maven Enforcer. Nous le configurons avec certaines règles qui doivent être appliquées pendant la phase de construction du projet.

Dans cette section, nous allons examiner les règles disponibles que nous pouvons appliquer à nos projets pour améliorer leur qualité.

4.1. Interdire la dépendance en double

Dans un projet multi-module, où une relation parent-enfant existe entre les POM , s'assurer qu'il n'y a pas de doublon de dépendance dans le POM final effectif d'un projet peut être une tâche délicate. Mais, avec la règle banDuplicatePomDependencyVersions , nous pouvons facilement nous assurer que notre projet est exempt d'un tel problème.

Tout ce que nous avons à faire est d'ajouter la balise banDuplicatePomDependencyVersions à la section rules de la configuration du plugin:

...    ...

Pour vérifier le comportement de la règle, nous pouvons dupliquer une dépendance dans pom.xml et exécuter mvn clean compile. Cela produira les lignes d'erreur suivantes sur la console:

... [WARNING] Rule 0: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions failed with message: Found 1 duplicate dependency declaration in this project: - dependencies.dependency[io.vavr:vavr:jar] ( 2 times ) [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.370 s [INFO] Finished at: 2019-02-19T10:17:57+01:00 ...

4.2. Exiger la version Maven et Java

Les règles requireMavenVersion et requireJavaVersion permettent un verrouillage à l'échelle du projet des versions Maven et Java requises, respectivement. Cela aidera à éliminer la disparité qui pourrait résulter de l'utilisation de différentes versions de Maven et JDK dans les environnements de développement.

Mettons à jour la section des règles de la configuration du plugin:

 3.0   1.8 

Celles-ci nous permettent de spécifier les numéros de version de manière flexible, à condition qu'ils soient conformes au modèle de spécification de la plage de versions du plugin.

En outre, les deux règles acceptent également un paramètre de message pour spécifier un message personnalisé:

...  3.0 Invalid Maven version. It should, at least, be 3.0  ...

4.3. Exiger une variable d'environnement

Avec la règle requireEnvironmentVariable , nous pouvons nous assurer qu'une certaine variable d'environnement est définie dans l'environnement d'exécution.

Il peut être répété pour accueillir plus d'une variable requise:

 ui   cook 

4.4. Exiger un profil actif

Les profils dans Maven nous aident à configurer les propriétés qui seront actives lorsque notre application est déployée dans différents environnements.

Par conséquent, nous pouvons utiliser la règle requireActiveProfile lorsque nous devons nous assurer qu'un ou plusieurs profils spécifiés sont actifs, garantissant ainsi la bonne exécution de notre application:

 local,base Missing active profiles 

Dans l'extrait de code ci-dessus, nous avons utilisé la propriété message pour fournir un message personnalisé indiquant si la vérification des règles échoue.

4.5. Autres règles

Le plugin Maven Enforcer a de nombreuses autres règles pour promouvoir la qualité et la cohérence du projet quel que soit l'environnement de développement.

En outre, le plugin a une commande pour afficher des informations sur certaines règles actuellement configurées:

mvn enforcer:display-info

5. Règles personnalisées

Jusqu'à présent, nous avons exploré les règles intégrées du plugin. Il est maintenant temps de créer notre propre règle personnalisée.

Tout d'abord, nous devons créer un nouveau projet Java qui contiendra notre règle personnalisée. Une règle personnalisée est un objet de classe qui implémente l' interface EnforceRule et remplace la méthode execute () :

public void execute(EnforcerRuleHelper enforcerRuleHelper) throws EnforcerRuleException { try { String groupId = (String) enforcerRuleHelper.evaluate("${project.groupId}"); if (groupId == null || !groupId.startsWith("org.baeldung")) { throw new EnforcerRuleException("Project group id does not start with org.baeldung"); } } catch (ExpressionEvaluationException ex) { throw new EnforcerRuleException( "Unable to lookup an expression " + ex.getLocalizedMessage(), ex ); } }

Our custom rule simply checks if the target project's groupId starts with org.baeldung or not.

Notice how we don't have to return boolean or anything as such to indicate the rule is not satisfied. We just throw an EnforcerRuleException with a description of what is wrong.

We can use our custom rule by adding it as a dependency to the Maven Enforcer plugin:

...    ...

Please note that if the custom rule project is not a published artifact on Maven Central, we can install it into the local Maven repo by running the mvn clean install.

This will make it available when compiling the target project that has the Maven Enforcer Plugin. Please see the plugin's documentation for the custom rule to learn more.

Pour le voir en action, nous pouvons définir la propriété groupId du projet avec le plug-in Enforcer sur autre chose que «org.baeldung» et exécuter mvn clean compile .

6. Conclusion

Dans ce rapide tutoriel, nous avons vu comment le plugin Maven Enforcer peut être un ajout utile à notre coffre de plugins existant. La possibilité d'écrire des règles personnalisées améliore sa gamme d'applications.

Veuillez noter que nous devons décommenter les dépendances et la règle pour l'exemple de règle personnalisée dans l'exemple de code source complet disponible sur GitHub.