Maven Deep Dive
Parent POM
Der Parent POM definiert gemeinsame Java-Version, Plugin-Versionen und Module. Er soll nicht unkontrolliert Abhaengigkeiten in alle Module pumpen. Deshalb werden viele Abhaengigkeiten nur in den konkreten Modul-POMs gesetzt.
<modules>
<module>shared-kernel</module>
<module>order-domain</module>
<module>order-application</module>
<module>adapters-rest-spring</module>
<module>app-spring-boot</module>
</modules>
Dependency Management
Dependency Management legt Versionen zentral fest. Ein Modul entscheidet trotzdem selbst, ob es die Dependency braucht.
Plugin Management
Plugin Management vermeidet Versionsdrift. Der Compiler verwendet bewusst release, damit Source, Target und Bootclasspath konsistent sind.
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>${java.version}</release>
</configuration>
</plugin>
Reactor-Strategie
In grossen Projekten baust du selten alles. Beispiele:
mvn -pl order-domain test
mvn -pl app-spring-boot -am verify
mvn -pl architecture-tests -am test
-pl waehlt Module, -am baut benoetigte Abhaengigkeiten mit.
Typische Enterprise-Regel
Domain-Module duerfen keine Framework-Starter importieren. REST/JPA/Kafka gehoeren in Adaptermodule.