Maven Enforcer Plugin

1. Übersicht

In diesem Tutorial lernen wir das Maven Enforcer Plugin kennen und wie wir es verwenden können, um den Grad der Konformität in unserem Projekt zu gewährleisten.

Das Plugin ist besonders praktisch, wenn wir Teams auf der ganzen Welt verteilt haben.

2. Abhängigkeit

Um das Plugin in unserem Projekt nutzen zu können, müssen wir unserer pom.xml die folgende Abhängigkeit hinzufügen :

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

Die neueste Version des Plugins ist auf Maven Central verfügbar.

3. Plugin Konfiguration und Ziele

Maven Enforcer hat zwei Ziele: Enforcer: Enforcer und Enforcer: Display-Info.

Das Durchsetzungsziel wird während einer Projekterstellung ausgeführt, um die in der Konfiguration angegebenen Regeln auszuführen, während das Anzeigeinfo- Ziel aktuelle Informationen zu den integrierten Regeln anzeigt, die in der pom.xml des Projekts vorhanden sind .

Definieren wir das Durchsetzungsziel im Executions- Tag. Darüber hinaus werden wir die Add - Konfiguration Tag, das die hält Regeln Definitionen für das Projekt:

...   enforce  enforce         ...

4. Maven Enforcer-Regeln

Das Schlüsselwort erzwingen gibt einen subtilen Hinweis auf die Existenz von Regeln, die eingehalten werden müssen. So funktioniert das Maven Enforcer-Plugin. Wir konfigurieren es mit einigen Regeln, die während der Erstellungsphase des Projekts durchgesetzt werden sollen.

In diesem Abschnitt werden wir uns die verfügbaren Regeln ansehen, die wir auf unsere Projekte anwenden können, um deren Qualität zu verbessern.

4.1. Doppelte Abhängigkeit verbieten

In einem Projekt mit mehreren Modulen, in dem eine Eltern-Kind-Beziehung zwischen POMs besteht , kann es eine schwierige Aufgabe sein , sicherzustellen, dass das effektive endgültige POM für ein Projekt keine doppelte Abhängigkeit aufweist . Mit der Regel banDuplicatePomDependencyVersions können wir jedoch problemlos sicherstellen, dass unser Projekt frei von solchen Störungen ist.

Alles, was wir tun müssen, ist, das Tag banDuplicatePomDependencyVersions zum Regelabschnitt der Plugin-Konfiguration hinzuzufügen :

...    ...

Um das Verhalten der Regel zu überprüfen, können wir eine Abhängigkeit in pom.xml duplizieren und mvn clean compile ausführen . Auf der Konsole werden die folgenden Fehlerzeilen angezeigt:

... [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. Benötigen Sie Maven und Java Version

Die Regeln requireMavenVersion und requireJavaVersion ermöglichen eine projektweite Sperrung der erforderlichen Maven- bzw. Java-Versionen. Dies wird dazu beitragen, die Unterschiede zu beseitigen, die durch die Verwendung verschiedener Versionen von Maven und JDK in Entwicklungsumgebungen entstehen können.

Lassen Sie uns den Regelabschnitt der Plugin-Konfiguration aktualisieren :

 3.0   1.8 

Diese ermöglichen es uns, die Versionsnummern auf flexible Weise anzugeben, sofern sie dem Versionsbereichsspezifikationsmuster des Plugins entsprechen.

Darüber hinaus akzeptieren beide Regeln auch einen Nachrichtenparameter zum Angeben einer benutzerdefinierten Nachricht:

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

4.3. Umgebungsvariable erforderlich

Mit der requireEnvironmentVariable- Regel können wir sicherstellen, dass eine bestimmte Umgebungsvariable in der Ausführungsumgebung festgelegt ist.

Es kann wiederholt werden, um mehr als eine erforderliche Variable aufzunehmen:

 ui   cook 

4.4. Aktives Profil erforderlich

Mithilfe von Profilen in Maven können wir Eigenschaften konfigurieren, die aktiv sind, wenn unsere Anwendung in verschiedenen Umgebungen bereitgestellt wird.

Folglich können wir die requireActiveProfile- Regel verwenden, wenn wir sicherstellen müssen, dass ein oder mehrere angegebene Profile aktiv sind, um so die erfolgreiche Ausführung unserer Anwendung zu gewährleisten:

 local,base Missing active profiles 

Im obigen Snippet haben wir die Nachrichteneigenschaft verwendet , um eine benutzerdefinierte Nachricht bereitzustellen, die anzeigt, ob die Regelprüfung fehlschlägt.

4.5. Andere Regeln

Das Maven Enforcer-Plugin enthält viele andere Regeln, um die Projektqualität und -konsistenz unabhängig von der Entwicklungsumgebung zu fördern.

Außerdem verfügt das Plugin über einen Befehl zum Anzeigen von Informationen zu einigen derzeit konfigurierten Regeln:

mvn enforcer:display-info

5. Benutzerdefinierte Regeln

Bisher haben wir die integrierten Regeln des Plugins untersucht. Jetzt ist es an der Zeit, unsere eigene benutzerdefinierte Regel zu erstellen.

Zuerst müssen wir ein neues Java-Projekt erstellen, das unsere benutzerdefinierte Regel enthält. Eine benutzerdefinierte Regel ist ein Klasse - Objekt , dass Geräte der EnforceRule Schnittstelle und überschreibt die execute () Methode :

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.

Um es in Aktion zu sehen, können wir die groupId- Eigenschaft des Projekts mit dem Enforcer-Plugin auf etwas anderes als "org.baeldung" setzen und mvn clean compile ausführen .

6. Fazit

In diesem kurzen Tutorial haben wir gesehen, wie das Maven Enforcer Plugin eine nützliche Ergänzung zu unserer vorhandenen Plugin-Truhe sein kann. Die Möglichkeit, benutzerdefinierte Regeln zu schreiben, erweitert den Anwendungsbereich.

Bitte beachten Sie, dass wir die Abhängigkeiten und Regeln für das Beispiel für benutzerdefinierte Regeln im vollständigen Beispielquellcode, der über GitHub verfügbar ist, auskommentieren müssen.