Maven Enforcer Plugin

1. Oversikt

I denne opplæringen skal vi lære om Maven Enforcer Plugin og hvordan vi kan bruke den til å garantere nivået på samsvar i prosjektet vårt.

Plugin er spesielt nyttig når vi har distribuert team, spredt over hele kloden.

2. Avhengighet

For å gjøre bruk av pluginet i prosjektet vårt, må vi legge til følgende avhengighet til vårt pom.xml:

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

Den siste versjonen av pluginet er tilgjengelig på Maven Central.

3. Plugin-konfigurasjon og mål

Maven Enforcer har to mål: håndhever: håndheve og håndhever: display-info.

De håndheve målet kjører under en prosjektbygging for å utføre regler som er spesifisert i konfigurasjonen, mens display-info mål viser aktuell informasjon om de innebygde reglene som er tilstede i prosjektets pom.xml.

La oss definere håndheve mål i henrettelser stikkord. Videre vil vi legge til konfigurasjon tag som holder regler definisjoner for prosjektet:

... håndheve håndheve ...

4. Maven Enforcer-regler

Nøkkelordet håndheve gir et subtilt forslag om eksistensen av regler å overholde. Slik fungerer Maven Enforcer-pluginet. Vi konfigurerer det med noen regler som skal håndheves under byggfasen av prosjektet.

I denne delen skal vi se på tilgjengelige regler som vi kan bruke på prosjektene våre for å forbedre kvaliteten.

4.1. Forbud duplikatavhengighet

I et multimodulprosjekt, hvor det eksisterer et foreldre-barn forhold POM-erog sørger for at det ikke er noen duplikat av avhengighet i den effektive finalen POM for et prosjekt kan være en vanskelig oppgave. Men, med banDuplicatePomDependencyVersions regel, kan vi enkelt sørge for at prosjektet vårt er fritt for slik feil.

Alt vi trenger å gjøre er å legge til banDuplicatePomDependencyVersions tag til regler delen av plugin-konfigurasjonen:

...    ...

For å sjekke regelens oppførsel kan vi duplisere en avhengighet i pom.xml og løp mvn ren kompilering. Det gir følgende feillinjer på konsollen:

... [ADVARSEL] Regel 0: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions mislyktes med melding: Fant 1 duplikatavhengighetserklæring i dette prosjektet: - dependencies.dependency [io.vavr: vavr: jar] (2 ganger) [INFO] ------------------------------------------------------- ------------------------- [INFO] BYGG FEIL [INFO] ----------------- -------------------------------------------------- ----- [INFO] Total tid: 1.370 s [INFO] Ferdig kl: 2019-02-19T10: 17: 57 + 01: 00 ...

4.2. Krev Maven- og Java-versjon

De requireMavenVersion og krever JavaVersion regler muliggjør en prosjektomspennende innlåsing av nødvendige Maven- og Java-versjoner. Dette vil bidra til å eliminere ulikheten som kan oppstå ved bruk av forskjellige versjoner av Maven og JDK i utviklingsmiljøer.

La oss oppdatere regler delen av plugin-konfigurasjonen:

 3.0   1.8 

Disse lar oss spesifisere versjonsnumrene på en fleksibel måte, så lenge de overholder pluginens spesifikasjonsmønster for versjonsområde.

Videre godtar begge reglene også a beskjed parameter for å spesifisere en tilpasset melding:

... 3.0 Ugyldig Maven-versjon. Det burde i det minste være 3,0 ...

4.3. Krever miljøvariabel

Med requireEnvironmentVariable regel, kan vi sikre at en bestemt miljøvariabel er satt i kjøringsmiljøet.

Det kan gjentas for å imøtekomme mer enn en nødvendig variabel:

 ui kokk 

4.4. Krev aktiv profil

Profiler i Maven hjelper oss med å konfigurere egenskaper som vil være aktive når applikasjonen vår distribueres til forskjellige miljøer.

Derfor kan vi bruke requireActiveProfile regelen når vi trenger å sikre at en eller flere spesifiserte profiler er aktive, og dermed garantere en vellykket gjennomføring av søknaden vår:

 lokal, base Mangler aktive profiler 

I utdraget ovenfor brukte vi beskjed egenskap for å gi en tilpasset melding for å vise om regelkontrollen mislykkes.

4.5. Andre regler

Pluggen Maven Enforcer har mange andre regler for å fremme prosjektkvalitet og konsistens uavhengig av utviklingsmiljø.

Plugin har også en kommando for å vise informasjon om noen for øyeblikket konfigurerte regler:

mvn håndhever: display-info

5. Egendefinerte regler

Så langt har vi utforsket de innebygde reglene for programtillegget. Nå er det på tide å se på å lage vår egen tilpassede regel.

Først må vi lage et nytt Java-prosjekt som inneholder vår tilpassede regel. En tilpasset regel er en klasse Gjenstand at implementerer EnforceRule grensesnitt og overstyrer henrette() metode:

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

Vår tilpassede regel sjekker bare om målprosjektet er groupId begynner med org.baeldung eller ikke.

Legg merke til hvordan vi ikke trenger å komme tilbake boolsk eller noe som helst for å indikere at regelen ikke er oppfylt. Vi kaster bare en EnforcerRuleException med en beskrivelse av hva som er galt.

Vi kan bruke vår tilpassede regel ved å legge den til som en avhengighet av Maven Enforcer-plugin:

...    ...

Vær oppmerksom på at hvis det tilpassede regelprosjektet ikke er en publisert gjenstand på Maven Central, kan vi installere det i den lokale Maven-repoen ved å kjøre mvn ren installasjon.

Dette vil gjøre det tilgjengelig når du kompilerer målprosjektet som har Maven Enforcer Plugin. Se plugin-dokumentasjonen for den tilpassede regelen for å lære mer.

For å se det i aksjon kan vi stille inn groupId eiendommen til prosjektet med Enforcer Plugin til noe annet enn “org.baeldung” og kjør mvn ren kompilering.

6. Konklusjon

I denne raske opplæringen så vi hvordan Maven Enforcer Plugin kan være et nyttig tillegg til vår eksisterende kiste med plugins. Evnen til å skrive tilpassede regler forbedrer bruksområdet.

Vær oppmerksom på at vi må fjerne kommentarene til avhengighetene og regelen for eksemplet med tilpasset regel i hele eksemplet på kildekoden som er tilgjengelig på GitHub.