Leitfaden zu Maven-Profilen

1. Übersicht

Maven-Profile können verwendet werden, um benutzerdefinierte Build-Konfigurationen zu erstellen , z. B. um eine Testgranularität oder eine bestimmte Bereitstellungsumgebung zu erreichen.

In diesem Tutorial lernen wir, wie man mit Maven-Profilen arbeitet.

2. Ein einfaches Beispiel

Normalerweise werden beim Ausführen des MVN-Pakets auch die Komponententests ausgeführt . Aber was ist, wenn wir das Artefakt schnell verpacken und ausführen möchten, um zu sehen, ob es funktioniert?

Zuerst erstellen wir ein No-Tests- Profil, das die Eigenschaft maven.test.skip auf true setzt:

 no-tests  true  

Als Nächstes führen wir das Profil aus, indem wir den Befehl mvn package -Pno-tests ausführen . Jetzt wird das Artefakt erstellt und die Tests werden übersprungen. In diesem Fall wäre der Befehl mvn package -Dmaven.test.skip einfacher gewesen.

Dies war jedoch nur eine Einführung in Maven-Profile. Schauen wir uns einige komplexere Setups an.

3. Profile deklarieren

Im vorherigen Abschnitt haben wir gesehen, wie ein Profil erstellt wird. Wir können so viele Profile konfigurieren, wie wir möchten, indem wir ihnen eindeutige IDs geben.

Angenommen, wir wollten ein Profil erstellen, in dem nur unsere Integrationstests ausgeführt wurden, und ein anderes Profil für eine Reihe von Mutationstests.

Wir beginnen mit der Angabe einer ID für jede ID in unserer Datei pom.xml :

  integration-tests   mutation-tests  

Innerhalb jedes Profilelements können wir viele Elemente wie Abhängigkeiten , Plugins , Ressourcen und finalName konfigurieren .

Für das obige Beispiel könnten wir Plugins und ihre Abhängigkeiten für Integrationstests und Mutationstests separat hinzufügen .

Durch das Aufteilen von Tests in Profile kann der Standardaufbau beschleunigt werden, indem er sich beispielsweise nur auf die Komponententests konzentriert.

3.1. Profilbereich

Jetzt haben wir diese Profile einfach in unsere Datei pom.xml eingefügt , die sie nur für unser Projekt deklariert.

In Maven 3 können wir jedoch drei beliebigen Standorten Profile hinzufügen:

  1. Projektspezifische Profile werden in die Datei pom.xml des Projekts aufgenommen
  2. Benutzerspezifische Profile werden in die Datei settings.xml des Benutzers aufgenommen
  3. Globale Profile werden in die Datei global settings.xml aufgenommen

Beachten Sie, dass Maven 2 eine vierte Position unterstützte, diese jedoch in Maven 3 entfernt wurde.

Wir versuchen, Profile in der Datei pom.xml zu konfigurieren, wann immer dies möglich ist. Der Grund ist, dass wir die Profile sowohl auf unseren Entwicklungsmaschinen als auch auf den Build-Maschinen verwenden möchten. Die Verwendung der Datei settings.xml ist schwieriger und fehleranfälliger, da wir sie selbst auf Build-Umgebungen verteilen müssen.

4. Profile aktivieren

Nachdem wir ein oder mehrere Profile erstellt haben, können wir sie verwenden oder mit anderen Worten aktivieren .

4.1. Anzeigen, welche Profile aktiv sind

Verwenden Sie das Ziel help: active-profile, um zu sehen, welche Profile in unserem Standardbuild aktiv sind:

mvn help:active-profiles

Da wir noch nichts aktiviert haben, erhalten wir:

The following profiles are active:

Naja nichts.

Wir werden sie gleich aktivieren. Eine andere Möglichkeit, schnell zu sehen, was aktiviert ist, besteht darin, das Maven-Help-Plugin in unsere pom.xml aufzunehmen und das Ziel der aktiven Profile mit der Kompilierungsphase zu verknüpfen :

   org.apache.maven.plugins maven-help-plugin 3.2.0   show-profiles compile  active-profiles      

Jetzt wollen wir sie benutzen! Wir werden uns verschiedene Möglichkeiten ansehen.

4.2. Mit -P

Eigentlich haben wir am Anfang schon einen Weg gesehen, nämlich dass wir Profile mit dem Argument -P aktivieren können .

Beginnen wir also mit der Aktivierung des Integrationstestprofils :

mvn package -P integration-tests

Wenn wir die aktiven Profile mit dem Befehl maven-help-plugin oder mvn help: active-profile -P Integrationstests überprüfen, erhalten wir das folgende Ergebnis:

The following profiles are active: - integration-tests

Wenn wir mehrere Profile gleichzeitig aktivieren möchten, verwenden wir eine durch Kommas getrennte Liste von Profilen:

mvn package -P integration-tests,mutation-tests

4.3. Standardmäßig aktiv

Wenn wir immer ein Profil ausführen möchten, können wir standardmäßig eines aktivieren:

 integration-tests  true  

Anschließend können wir das mvn-Paket ausführen , ohne die Profile anzugeben, und wir können überprüfen, ob das Integrationstestprofil aktiv ist.

Wenn wir jedoch den Befehl Maven ausführen und ein anderes Profil als das ActiveByDefault- Profil aktivieren , wird es übersprungen. Wenn wir also mvn package -P-Mutationstests ausführen , ist nur das Mutationstestprofil aktiv.

Wenn wir auf andere Weise aktivieren, wird auch das activeByDefault- Profil übersprungen, wie wir in den nächsten Abschnitten sehen werden.

4.4. Basierend auf einer Immobilie

Wir können Profile in der Kommandozeile aktivieren. Manchmal ist es jedoch bequemer, wenn sie automatisch aktiviert werden. Zum Beispiel können wir es auf eine -D- Systemeigenschaft stützen :

 active-on-property-environment   environment   

Wir aktivieren das Profil jetzt mit dem Befehl mvn package -Denvironment .

Es ist auch möglich, ein Profil zu aktivieren, wenn eine Eigenschaft nicht vorhanden ist:

 !environment 

Oder wir können das Profil aktivieren, wenn die Eigenschaft einen bestimmten Wert hat:

 environment test 

Wir können das Profil jetzt mit dem MVN-Paket -Denvironment = test ausführen.

Zuletzt können wir das Profil aktivieren, wenn die Eigenschaft einen anderen Wert als den angegebenen Wert hat:

 environment !test 

4.5. Basierend auf der JDK- Version

Eine weitere Option besteht darin, ein Profil zu aktivieren, das auf dem auf dem Computer ausgeführten JDK basiert. In diesem Fall möchten wir das Profil aktivieren, wenn die JDK-Version mit 11 beginnt:

 active-on-jdk-11  11  

Wir können auch Bereiche für die JDK-Version verwenden, wie in Maven Version Range Syntax erläutert.

4.6. Basierend auf dem Betriebssystem

Alternativ können wir das Profil basierend auf einigen Betriebssysteminformationen aktivieren.

Und wenn wir uns nicht sicher sind, können wir zuerst den Befehl mvn assertcer: display-info verwenden , der auf meinem Computer die folgende Ausgabe liefert:

Maven Version: 3.5.4 JDK Version: 11.0.2 normalized as: 11.0.2 OS Info: Arch: amd64 Family: windows Name: windows 10 Version: 10.0

Danach können wir ein Profil konfigurieren, das nur unter Windows 10 aktiviert ist:

 active-on-windows-10   windows 10 Windows amd64 10.0   

4.7. Basierend auf einer Datei

Eine andere Möglichkeit besteht darin, ein Profil auszuführen, wenn eine Datei vorhanden ist oder fehlt .

Erstellen wir also ein Testprofil , das nur ausgeführt wird, wenn die Datei testreport.html noch nicht vorhanden ist:

  target/testreport.html  

5. Deaktivieren eines Profils

Wir haben viele Möglichkeiten gesehen, Profile zu aktivieren, aber manchmal müssen wir auch eines deaktivieren.

Um ein Profil zu deaktivieren, können wir das '!' oder '-'.

Um das Profil active-on-jdk-11 zu deaktivieren, führen wir den Befehl mvn compile -P -active-on-jdk-11 aus .

6. Fazit

In diesem Artikel haben wir gesehen, wie man mit Maven-Profilen arbeitet, damit wir verschiedene Build-Konfigurationen erstellen können.

Die Profile helfen dabei, bestimmte Elemente des Builds auszuführen, wenn wir sie benötigen. Dies optimiert unseren Erstellungsprozess und hilft Entwicklern, schnelleres Feedback zu geben.

Schauen Sie sich die fertige pom.xml- Datei auf GitHub an.