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-KonzeptEnterprise-BedeutungBeispiel
Parent POMZentrale Plugin- und Qualitätsregelncompiler, surefire, failsafe, enforcer
BOMVersionen konsistent haltenSpring Boot BOM, Quarkus BOM, interne Plattform-BOM
Multi ModuleArchitekturgrenzen sichtbar machendomain, application, adapters, boot
ProfilesUmgebungsunterschiede steuernlokal, ci, native, integration-tests
EnforcerBuilds gegen Zufälle schützenJava-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.
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

ProblemSymptomKorrektur
Transitive Version driftetLokal funktioniert es, CI oder Produktion nichtdependency:tree prüfen, BOM nutzen, enforcer aktivieren
Zu viele ProfileBuild ist nicht mehr reproduzierbarProfile nur für echte Build-Varianten, Runtime-Konfig extern halten
Plugin-Versionen fehlenBuild ändert sich nach Maven/Plugin-UpdatepluginManagement zentral definieren
Tests vermischtIntegrationstests laufen zufällig in unit-test PhaseSurefire für Unit, Failsafe für Integration
Framework-Abhängigkeit in DomainDomain ist nicht mehr wiederverwendbar/testbarDependency-Richtung über Module korrigieren
⌂ Cockpit