Maven löst 2 Probleme:
- Dependency Management: benötigte Bibliotheken/Frameworks (und Maven-Plugins) werden automatisch heruntergeladen
- Reproduzierbarer Build: unabhängig von der verwendeten/favorisierten Entwicklungsumgebung
Ein Maven-Projekt wird in der Datei pom.xml
(Project Object Model) konfiguriert.
Empfohlene Ordner-Struktur sowie Dateifluss zwischen den Ordnern innerhalb 6 wichtiger Phasen:
Mavens Standard-Lebenszyklus teilt sich in 23 Phasen auf, von denen 8 mit Plugins vorbelegt sind:
Phase | Plugin:Goal | Bedeutung |
---|---|---|
process-resources | resources:resources | kopiert Produktiv-Ressourcen (z.B. Bilder oder Textdateien) |
compile | compiler:compile | kompiliert produktiven Quelltext Example.java zu JVM-Bytecode Example.class |
process-test-resources | resources:testResources | kopiert Test-Ressourcen |
test-compile | compiler:testCompile | kompiliert Test-Quelltext ExampleTest.java zu JVM-Bytecode ExampleTest.class |
test | surefire:test | führt die Tests aus |
package | jar:jar / war:war | komprimiert Produktiv-Klassen in ein .jar oder .war |
install | install:install | kopiert das .jar in das lokale Maven-Repository |
deploy | deploy:deploy | kopiert das .jar in ein entferntes Maven-Repository |
Der Scope einer Dependency regelt ihre Verfügbarkeit zu 3 verschiedenen Zeitpunkten:
<scope> |
compile | test | runtime | Beispiele |
---|---|---|---|---|
compile |
✓ | ✓ | ✓ | Apache Commons, Guava |
test |
✓ | JUnit, Mockito, AssertJ | ||
provided |
✓ | ✓ | Servlet API, Java EE API | |
runtime |
✓ | ✓ | JDBC Treiber |
Wenn man keinen expliziten Scope angibt, wird implizit compile
verwendet.