# Maven-Build-Performance und Testausführung

## Befund

Der ursprüngliche Aufruf `mvn test` war auf dem lokalen Windows-Rechner ungewöhnlich langsam.
Er lief aber erfolgreich durch: **156,7 Sekunden**, mit grünen Unit- und Contract-Tests.

Die Messung wurde mit Maven 3.9.16, JDK 21.0.11 und warmem lokalem Maven-Repository am
10.08.2026 durchgeführt. Das Projekt kompiliert weiterhin mit Java 17 (`maven.compiler.release=17`);
die lokale Maven-JVM war lediglich JDK 21.

## Ursache

Der Reactor enthält elf Maven-Projekte. Ohne Parallelisierung werden unabhängige Module und ihre
jeweiligen Surefire-Läufe nacheinander verarbeitet. Jeder Modul-Testlauf bringt außerdem
Initialisierungs- und JVM-Agent-Overhead mit. Die Spring-Cloud-Contract-Generierung war im
Messlauf dagegen bereits aktuell und nicht der Hauptverursacher.

Die Testcontainers-Integrationstests sind kein Grund für die lange Standardmessung, weil sie in
`procurex-app/pom.xml` standardmäßig ausgeschlossen sind. Sie brauchen eine eigene Docker-Engine
und werden separat ausgeführt.

## Maßnahme

Im Projekt liegt `.mvn/maven.config` mit:

```text
-B
-ntp
-T 1C
```

Damit laufen unabhängige Module parallel, Maven arbeitet nicht-interaktiv und erzeugt weniger
Terminalrauschen. Der parallele Lauf wurde erfolgreich verifiziert:

| Messung | Zeit | Ergebnis |
|---|---:|---|
| `mvn test` vor der Maßnahme | 156,7 s | BUILD SUCCESS |
| `mvn -T 1C test` nach der Maßnahme | 106,2 s | BUILD SUCCESS |

Das entspricht in dieser lokalen Umgebung einer Reduktion um rund 32 %. Die Werte sind keine
garantierte SLA, weil CPU, Dateisystem, JDK und Maven-Cache die Laufzeit beeinflussen.

## Bewusste Grenze

Die parallele Reactor-Ausführung gibt für das nicht als thread-safe markierte Spring-Cloud-
Contract-Plugin eine Maven-Warnung aus. Im aktuellen Build liegt `procurex-app` am Ende der
Modulabhängigkeiten; die Verifikation war grün. Bei Änderungen am Reactor oder Contract-Plugin
muss die Parallelisierung erneut geprüft werden.

Die drei Testcontainers-Tests bleiben ein separates Gate:

```powershell
mvn test -Dtest=ApprovalConcurrencyIntegrationTest
mvn test -Dtest=ProcureToPayFlowIntegrationTest
mvn test -Dtest=UniqueConstraintIntegrationTest
```

Ein grüner Standardlauf beweist daher nicht automatisch die Datenbankintegration.
