Maven-Plugins erweitern die Funktionalität des Build-Prozesses und sind ein wesentlicher Bestandteil, um komplexe Projekte effizient und standardisiert zu bauen. In diesem Kapitel vertiefen wir uns in vier besonders wichtige und interessante Plugins: Failsafe, Enforcer, Shade und Release. Jedes dieser Plugins adressiert unterschiedliche Aspekte des Build-Prozesses – von Integrationstests über Richtliniendurchsetzung, Erstellen ausführbarer Archive bis hin zum automatisierten Release-Management.
Das Maven Failsafe Plugin ist ein Ergänzungsplugin zum Surefire Plugin und wird für Integrationstests verwendet. Während das Surefire Plugin hauptsächlich Unit-Tests in der Phase test ausführt, kommt Failsafe in den Phasen integration-test und verify zum Einsatz. So können komplexe Tests (z.B. gegen eine Datenbank oder ein externes System) separat vom regulären Kompilier- und Testzyklus laufen.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M7</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>mvn test (Surefire)mvn verify (Failsafe)*Test.java*IT.java oder
*ITCase.java, damit Failsafe sie automatisch erkennt.Das Maven Enforcer Plugin setzt Richtlinien und Standards in einem Maven-Projekt durch. Es kann beispielsweise sicherstellen, dass eine bestimmte Java-Version genutzt wird, dass keine verbotenen Abhängigkeiten im Projekt sind oder dass die Maven-Version den Projektanforderungen entspricht.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>enforce-rules</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.6,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[11,)</version>
</requireJavaVersion>
<banDuplicatePomDependencyVersions/>
</rules>
<failFast>true</failFast>
</configuration>
</execution>
</executions>
</plugin>Das Maven Shade Plugin erlaubt das Erstellen
sogenannter „Fat-JARs“ oder „Uber-JARs“. Dabei werden alle
Abhängigkeiten (Libraries) in ein einziges ausführbares Archiv gepackt.
Dies ist nützlich für: - CLI-Tools oder
Microservices, die nur eine einzige ausführbare JAR
benötigen. - Inkompatible Class-Path-Konflikte: Durch
relocation kann man Paketnamen verschieben, um
Klassennamenkollisionen zu vermeiden.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>org.conflicting.lib</pattern>
<shadedPattern>my.project.shaded.org.conflicting.lib</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>Das Maven Release Plugin unterstützt den kompletten Release-Prozess eines Projekts: Versionsnummern anpassen, Quellcode taggen, Artefakte bauen, ins Repository deployen und die nächste SNAPSHOT-Version einstellen. Dadurch wird der Vorgang, der früher manuell und fehleranfällig war, automatisiert und reproduzierbar.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<pushChanges>true</pushChanges>
<!-- Weitere Einstellungen wie GIT- oder SVN-Details -->
</configuration>
</plugin>settings.xml
müssen u.U. Credentials für SCM und das Deployment-Repository hinterlegt
sein.integration-test und
verify.Mit diesen vier Plugins deckt Maven zentrale Aspekte der Softwareentwicklung ab: saubere Trennung von Unit- und Integrationstests, Einhaltung von Standards, Erzeugung ausführbarer Archive und reibungsloses Versionsmanagement. Ein tiefes Verständnis dieser Plugins macht den Entwicklungsprozess effizienter, sicherer und besser reproduzierbar.