# AP02 – Build-Infrastruktur härten ## Ziel Die `pom.xml` so erweitern, dass alle für M1 und die späteren Quality-Gates in M9 benötigten Bausteine bereitstehen, ohne schon Funktionalität zu implementieren. Dazu gehören **SLF4J als Fassade** (verlangt von `technik-und-architektur.md`), **JaCoCo** und **PIT** für die differenzierten Qualitätsgates, sowie das **maven-jar-plugin** für ein ausführbares JAR. ## Voraussetzungen - AP01 abgeschlossen ## Scope IN - `pom.xml` ergänzen um: - **SLF4J API** (`org.slf4j:slf4j-api`) als Compile-Dependency - **log4j-slf4j2-impl** (`org.apache.logging.log4j:log4j-slf4j2-impl`) als Runtime-Bindung (SLF4J → Log4j2) - **maven-jar-plugin** mit `Main-Class` = Bootstrap-Klasse (Name ist zu diesem Zeitpunkt noch offen, Platzhalter eintragen, in AP06 final setzen) - **jacoco-maven-plugin** für Coverage, an `verify` gebunden, **ohne** harte Schwellwerte in M1 (die kommen erst in M9) - **pitest-maven** als optionales Ziel (`mvn -P mutation test`), ebenfalls **ohne** harte Schwelle in M1 - **maven-surefire-plugin** bleibt wie bisher, ggf. Version aktualisieren falls nötig - `.editorconfig` im Repo-Root anlegen mit: - UTF-8 als Default-Encoding für Quellcode - LF als Zeilenende - 4 Spaces Einrückung für Java - `trim_trailing_whitespace = true` - `insert_final_newline = true` - `.gitattributes` anlegen: - `* text=auto eol=lf` - `*.bat text eol=crlf` - `*.java text eol=lf` - `*.md text eol=lf` ## Scope OUT - Umstellung bestehender Klassen von Log4j2-API auf SLF4J (kommt in AP04) - Einführung von Coverage-Schwellwerten (kommt erst in M9) - Einführung von PIT-Schwellwerten (kommt erst in M9) - Änderungen an Quellcode - Änderungen an Tests ## Schritte 1. Branch `m1/ap02-build-infra` anlegen 2. SLF4J-Dependencies in `pom.xml` eintragen; **keine** Imports in Quellcode ändern 3. JaCoCo-Plugin eintragen, an `verify` binden 4. PIT-Plugin in Profil `mutation` eintragen 5. maven-jar-plugin eintragen mit Platzhalter `Main-Class` (Wert: `de.gecheckt.asv.bootstrap.Main` — wird in AP06 Realität) 6. `.editorconfig` und `.gitattributes` anlegen 7. `mvn clean verify` laufen lassen, muss grün sein 8. `mvn -P mutation test` laufen lassen, muss grün sein (PIT muss die bestehenden Tests durchkauen können, auch wenn noch kaum was da ist) 9. Commit `M1-AP02: Build-Infrastruktur härten (SLF4J, JaCoCo, PIT, JAR-Plugin)` 10. Abschlussbericht schreiben ## Abnahmekriterien - `pom.xml` enthält: `slf4j-api`, `log4j-slf4j2-impl`, `maven-jar-plugin`, `jacoco-maven-plugin`, `pitest-maven` - `mvn clean verify` ist grün - `mvn -P mutation test` läuft ohne Fehler durch (Score ist **irrelevant** in M1) - JaCoCo erzeugt einen Report unter `target/site/jacoco/` - `.editorconfig` und `.gitattributes` liegen im Repo-Root - keine Änderungen an `.java`-Dateien - Abschlussbericht `berichte/AP02-bericht.md` liegt vor ## Rest-Risiken und offene Punkte - Der `Main-Class`-Eintrag im JAR-Plugin zeigt bis AP06 auf eine Klasse, die noch nicht existiert. Das ist okay, solange das JAR-Plugin die Datei nicht beim Packen validiert. Alternativ bis AP06 auf die bestehende `AsvValidatorApplication` zeigen lassen und in AP06 umbiegen. - PIT ohne Schwelle ist nur eine Trockenübung für M1. Die echten Schwellen werden in M9 aktiviert. ## Bericht `docs/arbeitspakete/m1/berichte/AP02-bericht.md` nach `templates/ap-bericht.md`.