Maven- und Modulgrundlage
Der vollständige Buildaufbau der Layered-Referenzimplementierung.
Java 217 ModuleMaven 3.9.16ArchUnitOfflinefähig
Modulgraph
Maven- und Modulgrundlage
Ziel
Die Layered-Variante besitzt sieben klar abgegrenzte Maven-Module. Jedes Modul hat genau eine primäre Verantwortung und eine dokumentierte Abhängigkeitsrichtung.
| Modul | Verantwortung | Erlaubte interne Abhängigkeiten |
|---|---|---|
| layered-domain | Fachtypen und Invarianten | keine |
| layered-application | Use Cases und benötigte Schnittstellen | layered-domain |
| layered-persistence | Datenbankadapter | layered-application, layered-domain |
| layered-integration | Messaging und Fremdsysteme | layered-application, layered-domain |
| layered-rest-api | REST-Eingang und DTO-Abbildung | layered-application, layered-domain |
| layered-bootstrap | Laufzeit-Zusammensetzung | REST, Persistence, Integration |
| layered-architecture-tests | Architektur-Fitness-Functions | alle Module ausschließlich im Test-Scope |
Buildbefehle
./mvnw -pl projects/01-layered -am verify
mvnw.cmd -pl projects/01-layered -am verify
Architekturprüfung
Die Architekturtests sind ein eigenes Modul. Dadurch bleiben die produktiven Module frei von ArchUnit-Abhängigkeiten, während der Gesamtreaktor alle erzeugten Klassen gemeinsam prüfen kann.
Root-Build
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aydinsude.enterprise</groupId>
<artifactId>enterprise-maven-architecture-lab</artifactId>
<version>0.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Enterprise Maven Architecture Lab</name>
<description>Drei getrennte Java-21-Referenzprojekte auf einer gemeinsamen fachlichen Spezifikation.</description>
<modules>
<module>projects/01-layered</module>
</modules>
<properties>
<java.version>21</java.version>
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.build.outputTimestamp>2026-07-12T00:00:00Z</project.build.outputTimestamp>
<spring-boot.version>4.1.0</spring-boot.version>
<junit.version>6.1.1</junit.version>
<archunit.version>1.4.2</archunit.version>
<assertj.version>3.27.7</assertj.version>
<maven.compiler.plugin.version>3.15.0</maven.compiler.plugin.version>
<maven.surefire.plugin.version>3.5.4</maven.surefire.plugin.version>
<maven.failsafe.plugin.version>3.5.4</maven.failsafe.plugin.version>
<maven.enforcer.plugin.version>3.6.3</maven.enforcer.plugin.version>
<maven.jar.plugin.version>3.4.2</maven.jar.plugin.version>
</properties>
<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>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit</artifactId>
<version>${archunit.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<release>${maven.compiler.release}</release>
<parameters>true</parameters>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<useModulePath>false</useModulePath>
<failIfNoTests>false</failIfNoTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven.jar.plugin.version}</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven.enforcer.plugin.version}</version>
<executions>
<execution>
<id>enforce-build-baseline</id>
<goals><goal>enforce</goal></goals>
<configuration>
<rules>
<requireJavaVersion><version>[21,22)</version></requireJavaVersion>
<requireMavenVersion><version>[3.9.0,4.0.0)</version></requireMavenVersion>
<dependencyConvergence/>
<banDuplicatePomDependencyVersions/>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>