Plugin Maven Enforcer

1. Panoramica

In questo tutorial, impareremo a conoscere il plug-in Maven Enforcer e come utilizzarlo per garantire il livello di conformità nel nostro progetto.

Il plugin è particolarmente utile quando abbiamo team distribuiti, sparsi in tutto il mondo.

2. Dipendenza

Per utilizzare il plugin nel nostro progetto, dobbiamo aggiungere la seguente dipendenza al nostro pom.xml :

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

L'ultima versione del plugin è disponibile su Maven Central.

3. Configurazione del plugin e obiettivi

Maven Enforcer ha due obiettivi: enforcer: enforce e enforcer: display-info.

L' obiettivo di applicazione viene eseguito durante la compilazione del progetto per eseguire le regole specificate nella configurazione, mentre l' obiettivo di visualizzazione delle informazioni mostra le informazioni correnti sulle regole integrate presenti nel pom.xml del progetto .

Definiamo l' obiettivo di enforce nel tag delle esecuzioni . Inoltre, aggiungeremo il tag di configurazione che contiene le definizioni delle regole per il progetto:

...   enforce  enforce         ...

4. Regole di Maven Enforcer

La parola chiave enforce fornisce un sottile suggerimento sull'esistenza di regole a cui attenersi. Ecco come funziona il plugin Maven Enforcer. Lo configuriamo con alcune regole che devono essere applicate durante la fase di costruzione del progetto.

In questa sezione, esamineremo le regole disponibili che possiamo applicare ai nostri progetti per migliorarne la qualità.

4.1. Escludi dipendenza duplicata

In un progetto multimodulo, in cui esiste una relazione genitore-figlio tra i POM , assicurarsi che non ci siano duplicati di dipendenza nell'effettivo POM finale di un progetto può essere un compito complicato. Ma, con la regola banDuplicatePomDependencyVersions , possiamo facilmente assicurarci che il nostro progetto sia privo di tali problemi.

Tutto quello che dobbiamo fare è aggiungere il tag banDuplicatePomDependencyVersions alla sezione delle regole della configurazione del plugin:

...    ...

Per controllare il comportamento della regola, possiamo duplicare una dipendenza in pom.xml ed eseguire mvn clean compile. Produrrà le seguenti righe di errore sulla 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. Richiedi Maven e la versione Java

Le regole requireMavenVersion e requireJavaVersion abilitano un blocco a livello di progetto delle versioni Maven e Java richieste, rispettivamente. Ciò contribuirà ad eliminare la disparità che potrebbe derivare dall'utilizzo di versioni diverse di Maven e JDK negli ambienti di sviluppo.

Aggiorniamo la sezione delle regole della configurazione del plugin:

 3.0   1.8 

Questi ci consentono di specificare i numeri di versione in modo flessibile, purché siano conformi al modello di specifica dell'intervallo di versione del plug-in.

Inoltre, entrambe le regole accettano anche un parametro di messaggio per specificare un messaggio personalizzato:

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

4.3. Richiedi variabile d'ambiente

Con la regola requireEnvironmentVariable , possiamo garantire che una determinata variabile di ambiente sia impostata nell'ambiente di esecuzione.

Può essere ripetuto per accogliere più di una variabile richiesta:

 ui   cook 

4.4. Richiedi profilo attivo

I profili in Maven ci aiutano a configurare le proprietà che saranno attive quando la nostra applicazione viene distribuita in ambienti diversi.

Di conseguenza, possiamo utilizzare la regola requireActiveProfile quando dobbiamo assicurarci che uno o più profili specificati siano attivi, garantendo così la corretta esecuzione della nostra applicazione:

 local,base Missing active profiles 

Nello snippet precedente, abbiamo utilizzato la proprietà message per fornire un messaggio personalizzato da mostrare se il controllo delle regole non riesce.

4.5. Altre regole

Il plugin Maven Enforcer ha molte altre regole per promuovere la qualità e la coerenza del progetto indipendentemente dall'ambiente di sviluppo.

Inoltre, il plugin ha un comando per visualizzare le informazioni su alcune regole attualmente configurate:

mvn enforcer:display-info

5. Regole personalizzate

Finora abbiamo esplorato le regole integrate del plugin. Ora è il momento di guardare alla creazione della nostra regola personalizzata.

Innanzitutto, dobbiamo creare un nuovo progetto Java che conterrà la nostra regola personalizzata. Una regola personalizzata è una classe Object che implementa l' interfaccia EnforceRule e sovrascrive il metodo 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.

Per vederlo in azione, possiamo impostare la proprietà groupId del progetto con l'Enforcer Plugin su qualcosa di diverso da "org.baeldung" ed eseguire mvn clean compile .

6. Conclusione

In questo breve tutorial, abbiamo visto come il plug-in Maven Enforcer può essere un'utile aggiunta al nostro pacchetto di plug-in esistente. La capacità di scrivere regole personalizzate migliora la sua gamma di applicazioni.

Tieni presente che dobbiamo rimuovere il commento dalle dipendenze e dalla regola per l'esempio di regola personalizzata nel codice sorgente di esempio completo disponibile su GitHub.