Next:
Impressum
Maven
1
Impressum
2
Einleitung zu Apache Maven
2.1
Warum Maven?
2.2
Erster Maven-Build in 60 Sekunden
2.3
Maven vs. Andere Build-Tools
3
Historie von Maven
3.1
Ursprung im Jakarta-Projekt
3.2
Maven 1.0 und die Vision “Konvention vor Konfiguration”
3.3
Übergang zu Maven 2
3.4
Verbesserungen mit Maven 3
3.5
Maven heute
4
Hauptmerkmale von Maven
4.1
Kernkomponenten
4.2
Konzeptuelle Grundlagen
4.3
Vergleich mit Ant und Gradle
4.3.1
Ant
4.3.2
Gradle
5
Philosophie von Maven: Konvention vor Konfiguration
6
Installation und Einrichtung von Apache Maven
6.1
Voraussetzungen
6.2
Installation über Paketmanager (empfohlen)
6.2.1
Linux (Debian/Ubuntu)
6.2.2
Linux (RHEL/Fedora)
6.2.3
macOS (Homebrew)
6.2.4
Windows (Chocolatey)
6.2.5
Windows (Scoop)
6.3
Manuelle Installation (Alternative Methode)
6.4
Installation überprüfen
6.5
Maven-Integration in IDEs (Hinweis für Entwickler)
6.6
Aktualisierung auf die neueste Version
7
Einführung in das Projekt Objektmodell
7.1
Beispiel POM
7.2
Erklärung der Hauptfelder
7.2.1
Group ID
7.2.2
Artifact ID
7.2.3
Version
7.2.4
Packaging
7.3
Umfassende Erklärung der weiteren Elemente
7.3.1
Properties
7.3.2
Dependencies
7.3.3
Repositories
7.3.4
Profiles
7.3.5
Build
7.3.6
Name und Description
8
Maven Lifecycle, Phasen und Goals
8.1
Übersicht
8.2
Lifecycles
8.2.1
Eingebaute Maven Lifecycles
8.3
Phasen des default Lifecycles
8.4
Goals (Ziele)
8.4.1
Beispiel: Zuordnung von Goals zu Phasen
8.4.2
Goals direkt ausführen
8.4.3
Auflistung aller Goals einer Phase
8.5
Wichtige Maven Plugins und ihre typischen Goals
8.5.1
Maven Compiler Plugin
8.5.2
Maven Surefire Plugin
8.5.3
Maven Jar Plugin
8.5.4
Maven Install Plugin
8.5.5
Maven Deploy Plugin
9
Maven Plugins
10
Plugins im Detail (Failsafe, Enforcer, Shade, Release)
10.1
Maven Failsafe Plugin
10.1.1
Überblick
10.1.2
Typische Konfiguration
10.1.3
Best Practices
10.2
Maven Enforcer Plugin
10.2.1
Überblick
10.2.2
Typische Konfiguration
10.2.3
Anwendungsbeispiele
10.2.4
Best Practices
10.3
Maven Shade Plugin
10.3.1
Überblick
10.3.2
Typische Konfiguration
10.3.3
Einsatzmöglichkeiten
10.3.4
Best Practices
10.4
Maven Release Plugin
10.4.1
Überblick
10.4.2
Release Workflow
10.4.3
Typische Konfiguration
10.4.4
Praxis und Stolpersteine
10.5
Zusammenfassung
11
Generieren, Kompilieren, Packen und Ausführen eines Java-Projekts mit Maven
11.1
Generieren eines Java-Projekts
11.1.1
Schritt-für-Schritt Anleitung
11.2
Kompilieren des Projekts
11.2.1
Kompilieren mit Maven
11.3
Packen des Projekts
11.3.1
Verpacken mit Maven
11.4
Ausführen der paketierten Applikation
11.4.1
Konfiguration des exec-maven-plugin
11.4.2
Ausführen der Applikation
12
Layout eines Maven-Projekts
12.1
Verzeichnis-Layout
12.2
Wichtige Verzeichnisse und Dateien
12.3
Gründe für das standardisierte Layout
13
Archetypen
13.1
1. Anlegen mit
mvn archetype:generate
13.2
2. Wichtige Maven-Archetypes
13.3
3. Manuelles Anlegen eines Maven-Projekts
13.4
4. Maven-Projekt mit IDE erstellen
14
Dependency Management
14.1
Einführung
14.2
Grundlegende Konzepte
14.2.1
Was sind Abhängigkeiten?
14.2.2
Dependency Tags
14.3
Dependency Scopes
14.3.1
Compile
14.3.2
Provided
14.3.3
Runtime
14.3.4
Test
14.3.5
System
14.3.6
Import
14.4
Transitive Abhängigkeiten
14.4.1
Abhängigkeiten in einem Baum darstellen
14.5
Dependency Management
14.5.1
Verwendung von Dependency Management
14.5.2
Vorteile von Dependency Management
14.6
Abhängigkeiten ausschließen
15
Die settings.xml Datei und das .m2 Verzeichnis in Maven
15.1
Einführung
15.2
Die settings.xml Datei
15.2.1
Aufbau der settings.xml
15.2.2
Best Practices für die settings.xml
15.3
Das .m2 Verzeichnis
15.3.1
Verzeichnisstruktur
16
Maven Packaging Types
16.1
JAR (Java Archive)
16.2
WAR (Web Application Archive)
16.3
EAR (Enterprise Archive)
16.4
POM (Project Object Model)
16.5
Maven Plugin
16.6
EJB (Enterprise JavaBean)
16.7
RAR (Resource Adapter Archive)
16.8
Benutzerdefinierte Packaging Types
17
Profiles
17.1
Einrichten von Maven-Profilen
17.1.1
Definition in der pom.xml
17.1.2
Definition in der settings.xml
17.2
Aktivieren von Maven-Profilen
17.2.1
Kommandozeile
17.2.2
settings.xml
17.2.3
Umgebungsvariablen
17.2.4
JDK-Version
17.2.5
Betriebssystem
17.2.6
Vorhandensein einer Datei
17.3
Deaktivieren von Profilen
17.4
Beispielhafte Anwendung
18
Plugin Management
18.1
Was sind Maven-Plugins?
18.2
Plugin Management einrichten
18.2.1
Erläuterung
18.3
Verwendung von Plugins in Unterprojekten
18.3.1
Erläuterung
18.4
Beispiele für häufige Plugins
18.4.1
Maven Compiler Plugin
18.4.2
Maven Surefire Plugin
18.5
Best Practices für das Plugin Management
19
CI/CD-Einbindung (Jenkins, GitLab, GitHub Actions)
19.1
1. Grundkonzept CI/CD mit Maven
19.2
2. Jenkins Integration
19.2.1
2.1 Jenkins-Job erstellen
19.2.2
2.2 Beispiel: Jenkinsfile (Pipeline-Syntax)
19.2.3
2.3 Best Practices für Jenkins und Maven
19.3
3. GitLab CI
19.3.1
3.1
.gitlab-ci.yml
Grundlagen
19.3.2
3.2 Beispiel
.gitlab-ci.yml
19.3.3
3.3 Umgebungskonfiguration und Secrets
19.3.4
3.4 Best Practices
19.4
4. GitHub Actions
19.4.1
4.1 Workflow-Konzept
19.4.2
4.2 Beispiel: Maven-Workflow
19.4.3
4.3 Erweiterungen
19.4.4
4.4 Best Practices
19.5
5. Gemeinsame Best Practices
19.6
6. Fazit
20
Multi-Module Projekt mit Maven
20.1
Einführung
20.2
Aufbau eines Multi-Module-Projekts
20.2.1
Verzeichnisstruktur
20.2.2
Haupt-POM-Datei
20.2.3
Modul-POM-Dateien
20.3
Bauen eines Multi-Module-Projekts
20.4
Vorteile von Multi-Module-Projekten
20.5
Beispiel: Einfaches Webanwendungsprojekt
20.5.1
Haupt-POM
20.5.2
Frontend-Modul
20.5.3
Backend-Modul
21
Code-Qualität (Checkstyle, PMD, SpotBugs, JaCoCo)
21.1
1. Checkstyle
21.1.1
1.1 Überblick
21.1.2
1.2 Typische Konfiguration
21.1.3
1.3 Best Practices
21.2
2. PMD
21.2.1
2.1 Überblick
21.2.2
2.2 Typische Konfiguration
21.2.3
2.3 Häufige PMD-Regeln
21.2.4
2.4 Best Practices
21.3
3. SpotBugs (ehem. FindBugs)
21.3.1
3.1 Überblick
21.3.2
3.2 Typische Konfiguration
21.3.3
3.3 Häufig gemeldete Bugs
21.3.4
3.4 Best Practices
21.4
4. JaCoCo (Java Code Coverage)
21.4.1
4.1 Überblick
21.4.2
4.2 Typische Konfiguration
21.4.3
4.3 Test Coverage Metriken
21.4.4
4.4 Best Practices
21.5
5. Gemeinsame Strategien im Projekt
21.5.1
5.1 Integrationsstufen
21.5.2
5.2 Profile und Konventionen
21.5.3
5.3 Kombination mit SonarQube oder Code Climate
21.6
6. Zusammenfassung
22
Erweiterte Konfiguration: settings.xml, Distribution Management, Release Plugin
22.1
1. Erweiterte Konfiguration mit settings.xml
22.1.1
1.1 Überblick
22.1.2
1.2 Beispielinhalte
22.1.3
1.3 Best Practices
22.2
2. Distribution Management
22.2.1
2.1 Grundidee
22.2.2
2.2 Beispiel
22.2.3
2.3 Authentifizierung
22.2.4
2.4 Best Practices
22.3
3. Maven Release Plugin
22.3.1
3.1 Grundidee
22.3.2
3.2 Ablauf eines Releases
22.3.3
3.3 Typische Konfiguration im POM
22.3.4
3.4 Release durchführen
22.3.5
3.5 Häufige Stolpersteine
22.4
4. Zusammenspiel in der Praxis
22.5
5. Best Practices und Zusammenfassung
23
Unit-Testing mit Maven und JUnit
23.1
Einführung in Unit-Tests mit Maven
23.2
Grundlagen von Unit-Tests mit Maven
23.2.1
Installation und Abhängigkeiten
23.2.2
Erste Unit-Test-Klasse
23.2.3
Testausführung mit Maven
23.3
Maven Surefire Plugin für Unit-Tests
23.4
Erweiterte Testkonfiguration
23.4.1
Ausschließen und Einbinden bestimmter Tests
23.4.2
Fehlerhafte Tests erneut ausführen
23.5
Unterschied zwischen Unit-Tests und Integrationstests
23.6
JUnit 5 Erweiterungen
23.6.1
Parameterisierte Tests
23.6.2
Lifecycle-Callbacks
23.6.3
Weiterführende Informationen
24
Parallelisierung von JUnit-Tests mit Maven Surefire Plugin
24.1
Grundlegende Konfiguration
24.2
Parallelisierungsmodi (
parallel
-Werte)
24.3
Dynamische Thread-Anzahl anhand der CPU-Kerne
24.4
Erweiterte Steuerung der Parallelisierung
24.5
JUnit 5 Parallelisierung (Alternative ohne Surefire)
24.6
Best Practices für parallele Tests
24.6.1
Weiterführende Informationen