chore: refactor Gradle config, standardize Kotlin MPP plugin usage, and update dependencies

- Unified plugin application across modules using `alias(libs.plugins.*)` instead of hardcoded IDs.
- Removed redundant JVM/JS source map tasks, improving Gradle and Docker build consistency.
- Updated dependencies, including `logback` and Webpack `copy-webpack-plugin`, and added contextual documentation.
- Added frontend architecture diagram in PlantUML (`docs/01_Architecture/Reference`), standardizing feature-core-shell dependencies.
This commit is contained in:
2026-02-05 02:07:53 +01:00
parent 1aaaf8a203
commit c3d288cd66
8 changed files with 302 additions and 1 deletions
@@ -0,0 +1,62 @@
# 🧹 Session Log: Gradle Build-Optimierung & Refactoring
**Datum:** 03.02.2026
**Teilnehmer:** Lead Architect, User
**Thema:** Umfassende Analyse, Bereinigung und Optimierung der Gradle Build-Skripte (Frontend, Backend, Platform).
## 📝 Zusammenfassung
In dieser Session wurde die gesamte Build-Infrastruktur des Projekts "Meldestelle" analysiert und refaktorisiert. Ziel war es, Redundanzen zu eliminieren (DRY), die Konsistenz zwischen Modulen zu erhöhen und die strikte Nutzung des Version Catalogs (`libs.versions.toml`) durchzusetzen. Ein kritischer Fehler im `monitoring-server` (Logback `NoClassDefFoundError`) wurde durch Korrekturen in der Dependency-Hierarchie behoben.
## 🛠️ Durchgeführte Änderungen
### 1. Version Catalog (`libs.versions.toml`)
* **Fix:** Syntaxfehler bei `npm-copy-webpack` behoben (NPM-Pakete müssen in `[versions]` definiert und via `devNpm` referenziert werden).
* **Neu:** `sqliteWasm` Version hinzugefügt.
* **Neu:** `logback-core` hinzugefügt, um Versionskonflikte mit Spring Boot zu vermeiden.
### 2. Root & Settings
* **`settings.gradle.kts`**: Hardcodierte Plugin-Versionen entfernt (soweit technisch möglich). Ausnahme: `foojay-resolver` muss aufgrund des Build-Lifecycles hardcodiert bleiben.
* **`build.gradle.kts` (Root)**:
* Zentralisierung der Kotlin Compiler-Optionen (JVM 25, `-Xexpect-actual-classes`).
* Globale Konfiguration für `tasks.test` (JUnit Platform, Heap Size).
* Reduzierung von "Noise" bei JS-Builds (Duplicate Strategy).
### 3. Frontend (KMP)
* **`frontend/core/*`**:
* Entfernung redundanter `compilerOptions` und `jvmToolchain` Konfigurationen.
* Vereinheitlichung der JS-Target Konfiguration (`browser()`, `binaries.library()`).
* Bereinigung von `auth`, `design-system`, `local-db`, `navigation`, `network`, `sync`.
* **`frontend/features/ping-feature`**: Anpassung an Core-Standards.
* **`frontend/shells/meldestelle-portal`**:
* Korrektur der Webpack-Konfiguration (`copy-webpack-plugin` via Catalog).
* Vereinfachung der Build-Logik.
### 4. Platform
* **`platform-bom`**:
* Aufnahme von `logback-core` in die Constraints, um Synchronität mit `logback-classic` zu erzwingen.
* Bereinigung von auskommentiertem Code.
* **`platform-testing`**:
* Explizites Hinzufügen von `logback-classic` und `logback-core`, um Laufzeitfehler in Tests zu verhindern.
* Entfernung redundanter Test-Konfigurationen.
### 5. Backend Infrastructure
* Bereinigung aller Module (`cache`, `event-store`, `gateway`, `messaging`, `persistence`, `security`) von redundanten Konfigurationen (DRY).
* **Bugfix `monitoring-server`**:
* Problem: `java.lang.NoClassDefFoundError` bei `JoranConfigurator` (Logback).
* Ursache: Versionskonflikt bzw. fehlendes `logback-core` im Test-Classpath durch Spring Boot BOM Interferenz.
* Lösung: Explizites Hinzufügen von `logback-core` und `logback-classic` im `monitoring-server` sowie Anpassung der `platform-bom`.
### 6. Contracts
* **`contracts/ping-api`**: Bereinigung und Konsistenzprüfung.
## ⚠️ Technische Highlights & Learnings
* **Settings Plugins & Version Catalog**: Der Zugriff auf `libs.*` im `plugins {}` Block der `settings.gradle.kts` ist limitiert. Workaround: Version hardcodieren oder `pluginManagement` nutzen.
* **Logback & Spring Boot**: Spring Boot managed Logback-Versionen aggressiv. Wenn man eine neuere Version (1.5.x) nutzen will als Spring Boot (1.4.x), muss man sowohl `classic` als auch `core` in der BOM erzwingen, sonst drohen `NoClassDefFoundError` zur Laufzeit.
* **KMP JS Targets**: Die Konfiguration von `js(IR)` vs. `js` und `browser()` vs. `nodejs()` sollte projektweit konsistent sein, um Build-Probleme zu vermeiden.
## ✅ Status
* Build: **SUCCESSFUL** (`./gradlew clean build`)
* Code Quality: Build-Skripte sind massiv entschlackt und wartbarer.
---
*Eintrag erstellt durch Curator Agent.*