Apache Maven ist ein deklaratives Build- und Projektmanagement-Werkzeug für Java, das Jason van Zyl 2002 als Unterprojekt von Apache Turbine entwickelte. Seit 2003 ist Maven ein Top-Level-Projekt der Apache Software Foundation. Statt Build-Logik zu programmieren, beschreibt das Projekt sich selbst in der Datei pom.xml — Maven leitet daraus den kompletten Build ab.
pom.xml und der Standard-Lebenszyklus
Die pom.xml (Project Object Model) definiert Gruppen-ID, Artefakt-ID, Version, Verpackungsart, Abhängigkeiten und Plugins. Maven führt dann den fest vorgegebenen Default-Lebenszyklus aus, dessen Phasen in dieser Reihenfolge laufen: validate, compile, test, package, verify, install, deploy. Der Aufruf einer späteren Phase führt automatisch alle vorherigen mit aus — mvn package kompiliert also auch, testet und erzeugt die JAR/WAR-Datei.
Die wichtigsten mvn-Aufrufe
mvn clean # build/-Verzeichnis löschen
mvn compile # Quellcode übersetzen
mvn test # Tests ausführen
mvn package # JAR/WAR erzeugen
mvn install # Artefakt ins lokale Repository kopieren
mvn deploy # Artefakt auf einen entfernten Server veröffentlichen
Mit mvn clean install startet man den klassischen Komplett-Build, mit mvn -DskipTests=true install lassen sich Tests überspringen. Abhängigkeiten lädt Maven automatisch aus zentralen Repositories, standardmäßig aus Maven Central.
Maven etablierte das Konvention-über-Konfiguration-Prinzip, das jüngere Werkzeuge übernommen haben: Gradle-Befehle setzen denselben Lebenszyklus-Gedanken mit programmierbaren Skripten um, während Make-Befehle den klassischen, regelbasierten Ansatz aus der Unix-Welt zeigen.