Maven- und Modulgrundlage

Der vollständige Buildaufbau der Layered-Referenzimplementierung.

Java 217 ModuleMaven 3.9.16ArchUnitOfflinefähig

Modulgraph

layered-domainFachtypen · Invarianten layered-applicationUse Cases · Ports layered-persistenceDatenbankadapter layered-integrationMessaging · Fremdsysteme layered-rest-apiHTTP-Eingang layered-bootstrap · Composition Root architecture-testsFitness Functions

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>

Darstellung

Design
Text
Dichte
⌂ Cockpit