diff --git a/GeminiBerichte/Tech-Stack_Referenz_Kotlin_2-3-0_Java-25_KMP.md b/GeminiBerichte/Tech-Stack_Referenz_Kotlin_2-3-0_Java-25_KMP.md new file mode 100644 index 00000000..99c445ff --- /dev/null +++ b/GeminiBerichte/Tech-Stack_Referenz_Kotlin_2-3-0_Java-25_KMP.md @@ -0,0 +1,72 @@ + +# Tech-Stack Referenz: Kotlin 2.3.0 & Java 25 (KMP) + +### 1. Kern-Spezifikationen + +| Komponente | Version | Status | +| --- | --- | --- | +| **Kotlin** | `2.3.0` | Stabil (K2 Compiler standardmäßig aktiv) | +| **Java (JDK)** | `25` | LTS (Long-Term Support) | +| **Gradle** | `9.2+` | Erforderlich für JDK 25 Support | +| **Android Plugin (AGP)** | `8.8.0+` | Empfohlen für Gradle 9.x Kompatibilität | + +--- + +### 2. Gradle Konfiguration (`build.gradle.kts`) + +Für ein **Kotlin Multiplatform (KMP)** Projekt ist die Java Toolchain-Konfiguration entscheidend, um sicherzustellen, dass der Kotlin-Compiler und die JVM-Targets Java 25 korrekt ansprechen. + +```kotlin +plugins { + kotlin("multiplatform") version "2.3.0" + id("com.android.library") version "8.8.0" // Falls Android Target genutzt wird +} + +kotlin { + // Globale Toolchain-Definition für alle JVM/Android Targets + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } + + jvm { + compilations.all { + compilerOptions.configure { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_25) + } + } + } + + // Weitere Targets (Beispiel iOS) + iosArm64() + iosSimulatorArm64() +} + +``` + +--- + +### 3. Gradle Wrapper Update + +Damit das Projekt Java 25 erkennt, muss der Wrapper auf dem neuesten Stand sein: + +**Terminal-Befehl:** + +```bash +./gradlew wrapper --gradle-version 9.2 --distribution-type all + +``` + +--- + +### 4. Wichtige Kompatibilitätshinweise für das Plugin + +* **IDE-Version:** Stelle sicher, dass **IntelliJ IDEA 2025.3** (oder neuer) installiert ist, da erst diese Version die volle Unterstützung für JDK 25 Sprachfeatures und das Kotlin 2.3.0 Plugin bietet. +* **K2 Compiler:** Kotlin 2.3.0 nutzt den K2-Compiler. Falls das Google AI Pro Plugin Code-Analysen durchführt, sollte es auf dem K2-Modus basieren. +* **Bytecode:** Java 25 Bytecode wird nur generiert, wenn das `jvmTarget` explizit auf `25` gesetzt ist. Andernfalls verbleibt Kotlin standardmäßig bei einer niedrigeren Version (meist 1.8 oder 11), was die neuen JDK-Features einschränken könnte. + +--- + +### 5. Bekannte Features in diesem Setup + +* **Java 25 Features:** Unterstützung für die finalen Versionen von *Scoped Values* und *Structured Concurrency*. +* **Kotlin 2.3.0 Features:** Nutzung von `explicit backing fields` und dem verbesserten `unused return value` Checker. diff --git a/build.gradle.kts b/build.gradle.kts index dc716c45..6c4983f6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,8 +48,22 @@ allprojects { } subprojects { - // Note: Individual modules handle Kotlin compiler configuration - // a Root project doesn't apply Kotlin plugins, so we can't configure KotlinCompile tasks here + // FINALE KORREKTUR: Konsistente JVM-Target-Konfiguration für Java und Kotlin + // basierend auf der Tech-Stack-Referenz. + plugins.withType { + extensions.configure { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } + } + } + + tasks.withType().configureEach { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_25) + freeCompilerArgs.add("-Xannotation-default-target=param-property") + } + } tasks.withType().configureEach { useJUnitPlatform { @@ -70,19 +84,7 @@ subprojects { plugins.withId("java") { val javaExt = extensions.getByType() // Ensure a full JDK toolchain with compiler is available (Gradle will auto-download if missing) - javaExt.toolchain.languageVersion.set(JavaLanguageVersion.of(24)) - - // Set Kotlin Toolchain for projects using Kotlin - plugins.withId("org.jetbrains.kotlin.jvm") { - extensions.configure { - jvmToolchain(24) - } - } - plugins.withId("org.jetbrains.kotlin.multiplatform") { - extensions.configure { - jvmToolchain(24) - } - } + javaExt.toolchain.languageVersion.set(JavaLanguageVersion.of(25)) tasks.register("perfTest") { description = "Runs tests tagged with 'perf'" @@ -116,23 +118,6 @@ subprojects { environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") } - // Suche diesen Block am Ende von subprojects und ersetze ihn: - tasks.withType().configureEach { - compilerOptions { - // Dein bestehender Argument-Eintrag - freeCompilerArgs.add("-Xannotation-default-target=param-property") - - // WICHTIG: Parameter-Namen für Spring Boot & Reflection erhalten - javaParameters.set(true) - - // OPTIONAL: Ermöglicht die Nutzung von Context Receivers (hilfreich in modernen Architekturen) - freeCompilerArgs.add("-Xcontext-receivers") - - // Explizite Setzung des JVM Targets auf 25 (überschreibt IDE-Fehleinstellungen) - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_25) - } - } - // ------------------------------ // Detekt & Ktlint default setup // ------------------------------