Maven Enforcer-plug-in

1. Overzicht

In deze zelfstudie gaan we leren over de Maven Enforcer-plug-in en hoe we deze kunnen gebruiken om het nalevingsniveau in ons project te garanderen.

De plug-in is vooral handig als we teams hebben verspreid over de hele wereld.

2. Afhankelijkheid

Om gebruik te maken van de plug-in in ons project, moeten we de volgende afhankelijkheid toevoegen aan onze pom.xml:

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

De nieuwste versie van de plug-in is beschikbaar op Maven Central.

3. Plug-in configuratie en doelen

Maven Enforcer heeft twee doelen: enforcer: afdwingen en enforcer: display-info.

De afdwingen goal wordt uitgevoerd tijdens het bouwen van een project om regels uit te voeren die in de configuratie zijn gespecificeerd, terwijl de weergave-info goal toont actuele informatie over de ingebouwde regels die aanwezig zijn in de pom.xml.

Laten we de afdwingen doelpunt in de executies label. Verder voegen we de configuratie tag met de reglement definities voor het project:

... afdwingen afdwingen ...

4. Maven Enforcer-regels

Het sleutelwoord afdwingen geeft een subtiele suggestie van het bestaan ​​van regels waaraan je je moet houden. Dit is hoe de Maven Enforcer-plug-in werkt. We configureren het met enkele regels die moeten worden gehandhaafd tijdens de bouwfase van het project.

In deze sectie gaan we kijken naar de beschikbare regels die we op onze projecten kunnen toepassen om de kwaliteit ervan te verbeteren.

4.1. Verbied dubbele afhankelijkheid

In een project met meerdere modules, waar een ouder-kindrelatie bestaat tussen POM's, zodat er geen dubbele afhankelijkheid is in de effectieve finale POM voor een project kan een lastige taak zijn. Maar met de banDuplicatePomDependencyVersions regel, kunnen we er gemakkelijk voor zorgen dat ons project vrij is van dergelijke problemen.

Het enige wat we hoeven te doen is het banDuplicatePomDependencyVersions tag naar de reglement sectie van de plugin-configuratie:

...    ...

Om het gedrag van de regel te controleren, kunnen we één afhankelijkheid dupliceren in pom.xml en loop mvn schoon compileren. Het produceert de volgende foutregels op de console:

... [WAARSCHUWING] Regel 0: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions is mislukt met bericht: 1 dubbele afhankelijkheidsverklaring gevonden in dit project: - dependencies.dependency [io.vavr: vavr: jar] (2 keer) [INFO] ----------------------------------------------- ------------------------- [INFO] BOUWFOUT [INFO] ----------------- -------------------------------------------------- ----- [INFO] Totale tijd: 1.370 s [INFO] Beëindigd op: 2019-02-19T10: 17: 57 + 01: 00 ...

4.2. Vereist Maven en Java-versie

De vereisenMavenVersion en vereisenJavaVersion regels maken een projectbrede lock-in van respectievelijk vereiste Maven- en Java-versies mogelijk. Dit zal helpen om de ongelijkheid te elimineren die kan ontstaan ​​door het gebruik van verschillende versies van Maven en JDK in ontwikkelomgevingen.

Laten we het reglement sectie van de plugin-configuratie:

 3.0   1.8 

Hiermee kunnen we de versienummers op een flexibele manier specificeren, zolang ze voldoen aan het specificatiepatroon van het versiebereik van de plug-in.

Bovendien accepteren beide regels ook een bericht parameter voor het specificeren van een aangepast bericht:

... 3.0 Ongeldige Maven-versie. Het zou in ieder geval 3.0 moeten zijn ...

4.3. Omgevingsvariabele vereist

Met de vereisenEnvironmentVariable regel, kunnen we ervoor zorgen dat een bepaalde omgevingsvariabele wordt ingesteld in de uitvoeringsomgeving.

Het kan worden herhaald om meer dan één vereiste variabele te accommoderen:

 ui cook 

4.4. Vereist actief profiel

Profielen in Maven helpen ons om eigenschappen te configureren die actief zijn wanneer onze applicatie wordt geïmplementeerd in verschillende omgevingen.

Daarom kunnen we de vereisenActiveProfile regel wanneer we ervoor moeten zorgen dat een of meer gespecificeerde profielen actief zijn, waardoor de succesvolle uitvoering van onze applicatie wordt gegarandeerd:

 local, base Ontbrekende actieve profielen 

In het bovenstaande fragment hebben we de bericht eigenschap om een ​​aangepast bericht op te geven om te laten zien of de regelcontrole mislukt.

4.5. Andere regels

De Maven Enforcer-plug-in heeft veel andere regels om de kwaliteit en consistentie van projecten te bevorderen, ongeacht de ontwikkelomgeving.

De plug-in heeft ook een commando om informatie weer te geven over enkele momenteel geconfigureerde regels:

mvn enforcer: display-info

5. Aangepaste regels

Tot nu toe hebben we de ingebouwde regels van de plug-in onderzocht. Nu is het tijd om te kijken naar het maken van onze eigen aangepaste regel.

Eerst moeten we een nieuw Java-project maken dat onze aangepaste regel zal bevatten. Een aangepaste regel is een klasse Voorwerp dat implementeert het EnforceRule interface en overschrijft de uitvoeren () methode:

public void execute (EnforcerRuleHelper enforcerRuleHelper) gooit EnforcerRuleException {probeer {String groupId = (String) enforcerRuleHelper.evaluate ("$ {project.groupId}"); if (groupId == null ||! groupId.startsWith ("org.baeldung")) {throw new EnforcerRuleException ("Projectgroep-id begint niet met org.baeldung"); }} catch (ExpressionEvaluationException ex) {throw new EnforcerRuleException ("Kan een expressie niet opzoeken" + ex.getLocalizedMessage (), ex); }}

Onze aangepaste regel controleert eenvoudig of het doelproject groupId begint met org.baeldung of niet.

Merk op dat we niet hoeven terug te keren boolean of iets als zodanig dat aangeeft dat niet aan de regel is voldaan. We gooien gewoon een EnforcerRuleException met een beschrijving van wat er mis is.

We kunnen onze aangepaste regel gebruiken door deze als afhankelijkheid toe te voegen aan de Maven Enforcer-plug-in:

...    ...

Houd er rekening mee dat als het aangepaste regelproject geen gepubliceerd artefact op Maven Central is, we het in de lokale Maven-opslagplaats kunnen installeren door de mvn schone installatie.

Dit maakt het beschikbaar bij het compileren van het doelproject dat de Maven Enforcer-plug-in heeft. Raadpleeg de documentatie van de plug-in voor de aangepaste regel voor meer informatie.

Om het in actie te zien, kunnen we de groupId eigendom van het project met de Enforcer-plug-in naar iets anders dan "org.baeldung" en voer het uit mvn schoon compileren.

6. Conclusie

In deze korte tutorial hebben we gezien hoe de Maven Enforcer-plug-in een nuttige aanvulling kan zijn op onze bestaande reeks plug-ins. De mogelijkheid om aangepaste regels te schrijven, vergroot het toepassingsgebied.

Houd er rekening mee dat we de afhankelijkheden en regel voor het voorbeeld van een aangepaste regel moeten verwijderen in de volledige voorbeeldbroncode die beschikbaar is op GitHub.