Hauptmerkmale von Maven

- Projektvorlagen (Archetypen): Vorgefertigte Struktur für neue
Projekte, basierend auf bewährten Konventionen.
- Automatisches Abhängigkeitsmanagement: Zentrale Verwaltung und
automatische Auflösung von Bibliotheks- und Plugin-Versionen.
- Trennung von Abhängigkeiten und Plugins: Eigenständige Definition
von Projektabhängigkeiten und Plugin-Abhängigkeiten, um Konflikte zu
minimieren.
- Zentrale Repositories: Einbindung öffentlicher oder privater
Repositories (z.B. Maven Central) für den Bezug von Artefakten.
- Transitive Abhängigkeiten: Automatisches Herunterladen und Einbinden
aller benötigten Abhängigkeiten, inklusive deren
Unterabhängigkeiten.
- Erweiterbarkeit durch Plugins: Breite Palette an Plugins für
zusätzliche Funktionen wie Code-Analyse, Paketierung oder
Deployment.
- Build-Lifecycle-Management: Definierte Build-Phasen (z.B. compile,
test, package) für reproduzierbare Abläufe und einheitliche
Strukturen.
- Integrierte Berichterstattung: Erstellung von Reports zu
Code-Qualität, Testabdeckung und Abhängigkeitsanalysen.
- Projektinformationsseiten: Automatische Generierung von
Dokumentationsseiten mit Projektinformationen und Metriken.
- Mehrmodul-Support: Zusammenfassung mehrerer Module in einem
zentralen Build für eine einheitliche Verwaltung und Versionierung.
Kernkomponenten
- POM (Project Object Model): Zentrale XML-Konfigurationsdatei, die
Informationen über das Projekt sowie Plugin- und
Abhängigkeitsdefinitionen enthält.
- Build Lifecycle: Vordefinierte Abfolge von Phasen (validate,
compile, test, package, verify, install, deploy), die sämtliche Schritte
eines Builds abdecken.
- Plugins: Erweiterbare Module, die spezifische Aufgaben im
Build-Prozess ausführen, zum Beispiel Code-Generierung oder
Testabdeckung.

Konzeptuelle Grundlagen
- Konvention vor Konfiguration: Standardisierte Verzeichnis- und
Namenskonventionen reduzieren Konfigurationsaufwand und
Fehlkonfigurationen.
- Dependency Management: Zentrales Herunterladen, Prüfen und Einbinden
von Bibliotheken ohne manuelle Versionsverwaltung.
- Repository: Nutzung zentraler und lokaler Repositories zur
Organisation, Wiederverwendung und Verteilung von Artefakten.
Vergleich mit Ant und
Gradle
Ant
- Flexibilität: Individuell anpassbare Build-Skripte, jedoch höherer
Wartungsaufwand und mehr Handarbeit bei Konfiguration und Dependency
Management.
- XML-basierte Konfiguration: Verwendung von XML-Dateien führt oft zu
umfangreichen und schwerer zu wartenden Build-Skripten.
- Dependency Management: Kein integriertes System, erfordert manuelle
Verwaltung oder zusätzliche Tools (z.B. Ivy).
Gradle
- DSL-basierte Konfiguration: Verwendung einer Groovy- oder
Kotlin-basierten DSL für kompaktere, gut lesbare Build-Skripte.
- Performance: Schnelle, inkrementelle Builds durch fortschrittliches
Caching und Task-Verwaltung.
- Dependency Management: Leistungsfähiges, flexibles System, das sich
in Aufbau und Nutzung stark an Maven anlehnt.