Maven, Builds & Dependency Management
Reproduzierbare Enterprise-Builds, Parent-POMs, BOMs, Plugins und typische Fehler.
Enterprise JavaBeispieleArchitekturOffline HTML
Maven als Architekturwerkzeug
Maven ist nicht nur ein Build-Tool. In Enterprise-Systemen beschreibt Maven Module, Abhängigkeitsrichtung, Versionierung, Plugin-Standards, Security-Checks, Testphasen, Packaging und Release-Konventionen. Ein schlecht gepflegter POM ist oft ein Symptom für schlechte Architekturgrenzen.
| Maven-Konzept | Enterprise-Bedeutung | Beispiel |
|---|---|---|
| Parent POM | Zentrale Plugin- und Qualitätsregeln | compiler, surefire, failsafe, enforcer |
| BOM | Versionen konsistent halten | Spring Boot BOM, Quarkus BOM, interne Plattform-BOM |
| Multi Module | Architekturgrenzen sichtbar machen | domain, application, adapters, boot |
| Profiles | Umgebungsunterschiede steuern | lokal, ci, native, integration-tests |
| Enforcer | Builds gegen Zufälle schützen | Java-Version, Dependency-Konvergenz, verbotene Abhängigkeiten |
BOM statt Einzelversionschaos
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Modulgrenzen mit Maven erzwingen
Ein sauberer Enterprise-Schnitt vermeidet, dass der Web-Controller direkt auf JPA-Entities, SQL-Helfer oder externe REST-Clients zugreift. Maven-Module können diese Richtung erzwingen: Domain kennt nichts von Frameworks, Application kennt Ports, Adapter implementieren Ports.
Ports & Adapters als technische Struktur für saubere fachliche Grenzen.
Maven-Modulstruktur
order-platform
├── order-domain # reine Fachlichkeit, keine Frameworks
├── order-application # Use Cases, Ports, Transaktionsabstraktion
├── order-adapter-jpa # JPA/Hibernate Implementierung
├── order-adapter-rest # REST Controller / DTO Mapping
└── order-boot # Runtime, DI, Konfiguration, Startklasse
Typische Maven-Probleme
| Problem | Symptom | Korrektur |
|---|---|---|
| Transitive Version driftet | Lokal funktioniert es, CI oder Produktion nicht | dependency:tree prüfen, BOM nutzen, enforcer aktivieren |
| Zu viele Profile | Build ist nicht mehr reproduzierbar | Profile nur für echte Build-Varianten, Runtime-Konfig extern halten |
| Plugin-Versionen fehlen | Build ändert sich nach Maven/Plugin-Update | pluginManagement zentral definieren |
| Tests vermischt | Integrationstests laufen zufällig in unit-test Phase | Surefire für Unit, Failsafe für Integration |
| Framework-Abhängigkeit in Domain | Domain ist nicht mehr wiederverwendbar/testbar | Dependency-Richtung über Module korrigieren |