9.4 KiB
Abschlussbericht AP02 – Build-Infrastruktur härten
Bezug:
docs/arbeitspakete/m1/AP02-build-infrastruktur.mdBearbeiter: Claude Code (claude-sonnet-4-6) Datum: 2026-04-09 Commit(s): — (kein Commit in AP02; der Mensch committet nach Prüfung) Status: ✅ abgeschlossen
1. Zusammenfassung
AP02 hat die Build-Infrastruktur vollständig gehärtet: SLF4J als Logging-Fassade (Compile) und log4j-slf4j2-impl als Runtime-Bindung wurden hinzugefügt, JaCoCo und PIT (im Profil mutation) konfiguriert, das maven-jar-plugin mit Platzhalter-Main-Class eingerichtet, und Mockito als expliziter Java-Agent in maven-surefire-plugin eingehängt. Die Mockito-ByteBuddy-Warnung aus AP01 ist verschwunden. Beide Build-Ziele (mvn clean verify und mvn -P mutation test) sind grün.
2. Umgesetzte Änderungen
pom.xml— neue Properties:slf4j.version=2.0.7,jacoco-maven-plugin.version=0.8.10,maven-dependency-plugin.version=3.6.0,maven-jar-plugin.version=3.3.0pom.xml— neue Dependency:org.slf4j:slf4j-api:2.0.7(Scope: compile; Logging-Fassade)pom.xml— neue Dependency:org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0(Scope: runtime; SLF4J→Log4j2-Bridge)pom.xml— neues Plugin:maven-dependency-plugin:3.6.0mit Goalproperties(liefert Jar-Pfade für Java-Agent)pom.xml—maven-surefire-pluginerweitert:argLinemit@{argLine} -javaagent:${org.mockito:mockito-core:jar}(Mockito als expliziter Java-Agent; JaCoCo-argLine per Late-Binding)pom.xml— neues Plugin:maven-jar-plugin:3.3.0mitmainClass=de.gecheckt.asv.bootstrap.Mainpom.xml— neues Plugin:jacoco-maven-plugin:0.8.10mit Goalsprepare-agentundreport(anverifygebunden; keine Schwellwerte)pom.xml— neues Profilmutationmitpitest-maven:1.15.3+pitest-junit5-plugin:1.2.1(JUnit-5-Adapter), GoalmutationCoveragein Phasetest.editorconfig— neu angelegt (UTF-8, LF, 4 Spaces für Java/XML, trim + final newline).gitattributes— neu angelegt (* text=auto eol=lf,*.bat eol=crlf,*.java eol=lf,*.md eol=lf)
3. Scope-Treue
| Scope-Punkt aus dem Arbeitspaket | Erfüllt? | Bemerkung |
|---|---|---|
slf4j-api als Compile-Dependency |
✅ | Version 2.0.7 (kompatibel mit Log4j2 2.20.0 / log4j-slf4j2-impl) |
log4j-slf4j2-impl als Runtime-Bindung |
✅ | Scope runtime |
maven-jar-plugin mit Main-Class |
✅ | Platzhalter de.gecheckt.asv.bootstrap.Main (wird in AP06 real) |
jacoco-maven-plugin an verify gebunden, ohne Schwellwerte |
✅ | prepare-agent + report, kein check-Goal |
pitest-maven im Profil mutation, ohne Schwellwerte |
✅ | Profil-Name exakt mutation; kein mutationThreshold |
Mockito als Java-Agent via maven-surefire-plugin argLine |
✅ | Warnung aus AP01 beseitigt |
.editorconfig anlegen |
✅ | Neue Datei im Repo-Root |
.gitattributes anlegen |
✅ | Neue Datei im Repo-Root (existierte nicht) |
Keine Änderungen an .java-Dateien |
✅ | Keine Java-Datei angefasst |
| Keine Coverage-Schwellwerte | ✅ | Kein check-Goal, keine <rules> |
| Keine PIT-Schwellwerte | ✅ | Kein mutationThreshold, kein coverageThreshold |
Wurde der Scope eingehalten? Ja, vollständig.
Wurden Dinge außerhalb des Scopes gemacht? Nein. Der einzige über den schriftlichen Scope hinausgehende Punkt ist die pitest-junit5-plugin-Dependency im PIT-Plugin, die technisch zwingend nötig ist, damit PIT JUnit-5-Tests überhaupt ausführen kann — ohne sie bricht mvn -P mutation test mit BUILD FAILURE ab. Das ist eine technische Voraussetzung des Abnahmekriteriums, nicht eine Scope-Erweiterung.
4. Abnahmekriterien
| Abnahmekriterium aus dem Arbeitspaket | Erfüllt? | Nachweis |
|---|---|---|
pom.xml enthält slf4j-api |
✅ | <artifactId>slf4j-api</artifactId> in <dependencies> |
pom.xml enthält log4j-slf4j2-impl |
✅ | <artifactId>log4j-slf4j2-impl</artifactId> in <dependencies> |
pom.xml enthält maven-jar-plugin |
✅ | maven-jar-plugin:3.3.0 mit mainClass |
pom.xml enthält jacoco-maven-plugin |
✅ | jacoco-maven-plugin:0.8.10, zwei Executions |
pom.xml enthält pitest-maven |
✅ | Im Profil mutation, pitest-maven:1.15.3 |
mvn clean verify ist grün |
✅ | BUILD SUCCESS, 147 Tests, 0 Failures, 0 Errors |
mvn -P mutation test läuft ohne Fehler |
✅ | BUILD SUCCESS; 249 Mutationen, 207 getötet (83%), Laufzeit ~39 s |
JaCoCo-Report unter target/site/jacoco/ |
✅ | target/site/jacoco/index.html und Paket-Reports vorhanden |
| Mockito-Warnung „self-attaching via ByteBuddy" nicht mehr im Log | ✅ | Grep über Build-Log: kein Treffer für „self-attach", „ByteBuddy", „dynamic loading" |
.editorconfig liegt im Repo-Root |
✅ | D:\Dev\Projects\asv-format-validator\.editorconfig |
.gitattributes liegt im Repo-Root |
✅ | D:\Dev\Projects\asv-format-validator\.gitattributes |
Keine Änderungen an .java-Dateien |
✅ | git status zeigt nur pom.xml, .editorconfig, .gitattributes |
5. Build- und Teststatus
5.1 mvn clean verify
- Ergebnis: ✅ BUILD SUCCESS
- Anzahl Tests: 147 (0 neu; AP02 ändert keinen Testcode)
- Fehler / Skipped: 0 / 0
- Dauer: ~22 s
- JaCoCo: Report erzeugt unter
target/site/jacoco/
Warnungen beim Build:
| Warnung | Quelle | Bewertung |
|---|---|---|
Java HotSpot VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended |
HotSpot / JaCoCo-Agent | Unvermeidlich wenn JaCoCo-Agent den bootstrap classpath erweitert; kosmetisch, nicht blockierend. War bereits in AP01 vorhanden. |
[ERROR] ... Fehler beim Lesen der Datei: File does not exist: /non/existent/file.txt |
Log4j2-Testausgabe in AsvValidatorApplicationTest |
Erwartete Test-Logausgabe, kein echter Fehler |
Die Mockito-Warnungen aus AP01 (Mockito is currently self-attaching, WARNING: Dynamic loading of agents will be disallowed) sind nicht mehr vorhanden.
5.2 mvn -P mutation test
- Ergebnis: ✅ BUILD SUCCESS
- Generierte Mutationen: 249
- Getötet: 207 (83%)
- Test-Strength: 92%
- Line Coverage (mutierte Klassen): 91%
- Laufzeit PIT: ~29 s (Gesamt-Build ~39 s)
- Anmerkung: Mutation-Score ist in M1 irrelevant; Schwellwerte kommen in M9.
6. Rest-Risiken und offene Punkte
-
pitest-junit5-pluginnicht im AP-Dokument erwähnt: Das AP-Dokument nenntpitest-maven, aber nicht die erforderliche JUnit-5-Adapter-Dependency. Ohne sie bricht PIT mit BUILD FAILURE ab. Der Adapter (pitest-junit5-plugin:1.2.1) wurde als Pflicht-Ergänzung hinzugefügt und ist im Profilmutationkapselt. Kein Risiko für M1; in M9 muss beim Versions-Update beachtet werden, dass PIT-Plugin und JUnit-5-Adapter zueinander kompatibel bleiben. -
Main-Class-Eintrag zeigt auf nicht-existente Klasse:de.gecheckt.asv.bootstrap.Mainexistiert erst ab AP06. Das JAR ist bis dahin mitjava -jarnicht startbar, was aber kein M1-Blockers ist. In AP06 wird die Klasse angelegt und der Eintrag damit valide. -
HotSpot-Sharing-Warnung bleibt: Die Warnung
Sharing is only supported for boot loader classesentsteht durch den JaCoCo-Agenten und ist unvermeidlich. Sie ist kosmetisch und nicht blockierend. -
SLF4J-API vorhanden, aber noch kein Code nutzt sie: Erst ab AP04 werden die Log4j2-Direktimporte auf SLF4J umgestellt. Bis dahin liegt
slf4j-apiungenutzt im Classpath — das ist der gewollte Zustand und erzeugt keine Fehler. -
mvn -P mutation testund Mockito-Agent: PIT startet einen eigenen Minion-Prozess; der Mockito-Java-Agent inargLinevon Surefire hat keinen Einfluss auf den PIT-Minion. Das ist unkritisch, da PIT keine Mockito-Interaktion benötigt.
7. Empfehlungen für Folge-Arbeitspakete
-
AP03 (Paketstruktur): Keine Build-Infrastruktur-Abhängigkeiten. Kann direkt auf Basis der Klassifikationstabelle aus AP01 starten.
-
AP04 (Logging-Umstellung):
slf4j-apiundlog4j-slf4j2-implsind bereit. AP04 darf jetzt die Log4j2-Direktimporte inAsvValidatorApplicationauf SLF4J-Logger umstellen. Keinpom.xml-Anpassungsbedarf in AP04. -
AP06 (Bootstrap/CLI):
maven-jar-pluginzeigt aufde.gecheckt.asv.bootstrap.Main. AP06 muss diese Klasse anlegen (oder den Eintrag auf die finale Klasse umbiegen) und denargLine-Kommentar inpom.xmlaktualisieren, falls sich der Klassenname ändert. -
M9 (Quality-Gates): JaCoCo und PIT sind ohne Schwellwerte eingerichtet. In M9 werden Coverage- und Mutation-Schwellwerte als
<rules>injacoco-maven-pluginbzw. alsmutationThreshold/coverageThresholdinpitest-mavenergänzt. Beim Update vonpitest-junit5-pluginauf die dann aktuelle Version sicherstellen, dass Kompatibilität mitpitest-mavengewahrt bleibt.
8. Reviewer-Checkliste
- Alle im Arbeitspaket genannten Scope-IN-Punkte sind nachweislich umgesetzt (Abschnitte 2 und 3)
- Keine Scope-OUT-Punkte wurden angefasst (keine
.java-Dateien, keine Coverage-Schwellwerte, keine PIT-Schwellwerte) - Abnahmekriterien sind mit konkreten Nachweisen belegt (Abschnitt 4)
mvn clean verifyist grün (147 Tests, BUILD SUCCESS — Abschnitt 5.1)- Der Commit für dieses AP hat eine sprechende Message (
M1-AP02: Build-Infrastruktur härten) — Commit liegt beim Menschen - Keine Regeln der Grunddokumente (Spec, Fachliche, Technik) wurden verletzt
- Rest-Risiken sind ehrlich dokumentiert (Abschnitt 6)