chore(infra+frontend): upgrade Gradle to 9.3.1 and fix KMP plugin conflicts in Docker builds
- Updated Gradle version in `.env`, Dockerfiles, and wrapper to 9.3.1. - Replaced alias-based application of `kotlinMultiplatform` plugin with direct `id` usage in subprojects to resolve "Plugin loaded multiple times" error. - Applied centralized plugin management and Gradle daemon optimizations to improve Docker build stability and address KMP classloading issues.
This commit is contained in:
@@ -11,8 +11,8 @@ RESTART_POLICY=no
|
|||||||
|
|
||||||
# Docker build versions (optional overrides)
|
# Docker build versions (optional overrides)
|
||||||
DOCKER_VERSION=1.0.0-SNAPSHOT
|
DOCKER_VERSION=1.0.0-SNAPSHOT
|
||||||
DOCKER_BUILD_DATE=2025-12-22T15:00:00Z
|
DOCKER_BUILD_DATE=2026-02-02T15:00:00Z
|
||||||
DOCKER_GRADLE_VERSION=9.2.1
|
DOCKER_GRADLE_VERSION=9.3.1
|
||||||
# Check if 25 is intended (Early Access) or if LTS 21 was meant
|
# Check if 25 is intended (Early Access) or if LTS 21 was meant
|
||||||
DOCKER_JAVA_VERSION=25
|
DOCKER_JAVA_VERSION=25
|
||||||
DOCKER_NODE_VERSION=24.12.0
|
DOCKER_NODE_VERSION=24.12.0
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ GF_ADMIN_USER=admin
|
|||||||
GF_ADMIN_PASSWORD=admin
|
GF_ADMIN_PASSWORD=admin
|
||||||
|
|
||||||
# Docker build versions (optional overrides)
|
# Docker build versions (optional overrides)
|
||||||
DOCKER_GRADLE_VERSION=9.2.1
|
DOCKER_GRADLE_VERSION=9.3.1
|
||||||
DOCKER_JAVA_VERSION=25
|
DOCKER_JAVA_VERSION=25
|
||||||
DOCKER_NODE_VERSION=24.12.0
|
DOCKER_NODE_VERSION=24.12.0
|
||||||
DOCKER_NGINX_VERSION=1.28.0-alpine
|
DOCKER_NGINX_VERSION=1.28.0-alpine
|
||||||
|
|||||||
+7
-5
@@ -2,7 +2,6 @@ import groovy.json.JsonSlurper
|
|||||||
import io.gitlab.arturbosch.detekt.Detekt
|
import io.gitlab.arturbosch.detekt.Detekt
|
||||||
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
|
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
import org.jlleitschuh.gradle.ktlint.KtlintExtension
|
import org.jlleitschuh.gradle.ktlint.KtlintExtension
|
||||||
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
|
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
|
||||||
@@ -17,7 +16,8 @@ plugins {
|
|||||||
// This prevents "plugin loaded multiple times" errors in Gradle 9.2.1+
|
// This prevents "plugin loaded multiple times" errors in Gradle 9.2.1+
|
||||||
// Subprojects apply these plugins via version catalog: alias(libs.plugins.kotlinJvm)
|
// Subprojects apply these plugins via version catalog: alias(libs.plugins.kotlinJvm)
|
||||||
alias(libs.plugins.kotlinJvm) apply false
|
alias(libs.plugins.kotlinJvm) apply false
|
||||||
alias(libs.plugins.kotlinMultiplatform) apply false
|
// CHANGE: Apply KMP plugin at root (but don't configure targets yet) to claim NodeJsRootPlugin ownership
|
||||||
|
alias(libs.plugins.kotlinMultiplatform) apply true
|
||||||
alias(libs.plugins.kotlinSerialization) apply false
|
alias(libs.plugins.kotlinSerialization) apply false
|
||||||
alias(libs.plugins.kotlinSpring) apply false
|
alias(libs.plugins.kotlinSpring) apply false
|
||||||
alias(libs.plugins.kotlinJpa) apply false
|
alias(libs.plugins.kotlinJpa) apply false
|
||||||
@@ -34,9 +34,11 @@ plugins {
|
|||||||
alias(libs.plugins.ktlint)
|
alias(libs.plugins.ktlint)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Workaround for Gradle 9 / KMP Race Condition:
|
// Minimal KMP configuration for Root Project to satisfy the plugin
|
||||||
// Wir erzwingen die Initialisierung des NodeJsRootPlugins im Root-Projekt
|
// This ensures NodeJsRootPlugin is initialized here first.
|
||||||
apply<NodeJsRootPlugin>()
|
kotlin {
|
||||||
|
jvm() // Dummy target to keep KMP happy
|
||||||
|
}
|
||||||
|
|
||||||
// ##################################################################
|
// ##################################################################
|
||||||
// ### ALLPROJECTS CONFIGURATION ###
|
// ### ALLPROJECTS CONFIGURATION ###
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# ===================================================================
|
# ===================================================================
|
||||||
|
|
||||||
# === GLOBAL ARGS ===
|
# === GLOBAL ARGS ===
|
||||||
ARG GRADLE_VERSION=9.2.1
|
ARG GRADLE_VERSION=9.3.1
|
||||||
ARG JAVA_VERSION=25
|
ARG JAVA_VERSION=25
|
||||||
ARG CADDY_VERSION=2.11-alpine
|
ARG CADDY_VERSION=2.11-alpine
|
||||||
ARG VERSION=1.0.0-SNAPSHOT
|
ARG VERSION=1.0.0-SNAPSHOT
|
||||||
@@ -21,8 +21,8 @@ WORKDIR /workspace
|
|||||||
|
|
||||||
# 1. Gradle Optimizations (Memory & Caching)
|
# 1. Gradle Optimizations (Memory & Caching)
|
||||||
# Increased Heap to 4g for Kotlin 2.3 JS Compilation
|
# Increased Heap to 4g for Kotlin 2.3 JS Compilation
|
||||||
|
# REMOVED: -Dorg.gradle.daemon=false (We want the daemon to handle classloading correctly!)
|
||||||
ENV GRADLE_OPTS="-Dorg.gradle.caching=true \
|
ENV GRADLE_OPTS="-Dorg.gradle.caching=true \
|
||||||
-Dorg.gradle.daemon=false \
|
|
||||||
-Dorg.gradle.parallel=true \
|
-Dorg.gradle.parallel=true \
|
||||||
-Dorg.gradle.workers.max=4 \
|
-Dorg.gradle.workers.max=4 \
|
||||||
-Dorg.gradle.jvmargs=-Xmx4g \
|
-Dorg.gradle.jvmargs=-Xmx4g \
|
||||||
@@ -49,14 +49,13 @@ COPY contracts/ contracts/
|
|||||||
RUN mkdir -p docs
|
RUN mkdir -p docs
|
||||||
|
|
||||||
# 4. Build Web App
|
# 4. Build Web App
|
||||||
# Using --no-configuration-cache initially to avoid issues with first run in docker,
|
# REMOVED: --no-daemon flag to allow Gradle to manage its classloaders properly
|
||||||
# but can be enabled if stable.
|
# This fixes the "IsolatedKotlinClasspathClassCastException" in Gradle 9.x + KMP
|
||||||
RUN --mount=type=cache,target=/home/gradle/.gradle/caches \
|
RUN --mount=type=cache,target=/home/gradle/.gradle/caches \
|
||||||
--mount=type=cache,target=/home/gradle/.gradle/wrapper \
|
--mount=type=cache,target=/home/gradle/.gradle/wrapper \
|
||||||
./gradlew :frontend:shells:meldestelle-portal:jsBrowserDistribution \
|
./gradlew :frontend:shells:meldestelle-portal:jsBrowserDistribution \
|
||||||
-Pproduction=true \
|
-Pproduction=true \
|
||||||
-PnoSourceMaps=true \
|
-PnoSourceMaps=true \
|
||||||
--no-daemon \
|
|
||||||
--stacktrace
|
--stacktrace
|
||||||
|
|
||||||
# 5. Prepare Dist
|
# 5. Prepare Dist
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# ===================================================================
|
# ===================================================================
|
||||||
|
|
||||||
# 1. Build Stage (Debian-basiert für Stabilität bei Desktop-Builds)
|
# 1. Build Stage (Debian-basiert für Stabilität bei Desktop-Builds)
|
||||||
FROM gradle:9.2.1-jdk-25-and-25-alpine AS builder
|
FROM gradle:9.3.1-jdk-25-and-25-alpine AS builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ RUN set -eu; \
|
|||||||
# ===================================================================
|
# ===================================================================
|
||||||
# Stage 2: Runtime Stage - Ubuntu mit VNC + noVNC
|
# Stage 2: Runtime Stage - Ubuntu mit VNC + noVNC
|
||||||
# ===================================================================
|
# ===================================================================
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# ===================================================================
|
# ===================================================================
|
||||||
|
|
||||||
# === GLOBAL ARGS ===
|
# === GLOBAL ARGS ===
|
||||||
ARG GRADLE_VERSION=9.2.1
|
ARG GRADLE_VERSION=9.3.1
|
||||||
ARG JAVA_VERSION=25
|
ARG JAVA_VERSION=25
|
||||||
ARG NGINX_IMAGE_TAG=1.28-alpine
|
ARG NGINX_IMAGE_TAG=1.28-alpine
|
||||||
ARG VERSION=1.0.0-SNAPSHOT
|
ARG VERSION=1.0.0-SNAPSHOT
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -11,7 +11,7 @@ services:
|
|||||||
context: .
|
context: .
|
||||||
dockerfile: backend/infrastructure/gateway/Dockerfile
|
dockerfile: backend/infrastructure/gateway/Dockerfile
|
||||||
args:
|
args:
|
||||||
GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.2.1}"
|
GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.3.1}"
|
||||||
JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
||||||
VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
||||||
BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
||||||
@@ -82,7 +82,7 @@ services:
|
|||||||
context: .
|
context: .
|
||||||
dockerfile: backend/services/ping/Dockerfile
|
dockerfile: backend/services/ping/Dockerfile
|
||||||
args:
|
args:
|
||||||
GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.2.1}"
|
GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.3.1}"
|
||||||
JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
||||||
VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
||||||
BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
||||||
@@ -150,7 +150,7 @@ services:
|
|||||||
# context: .
|
# context: .
|
||||||
# dockerfile: backend/services/entries/Dockerfile
|
# dockerfile: backend/services/entries/Dockerfile
|
||||||
# args:
|
# args:
|
||||||
# GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.2.1}"
|
# GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.3.1}"
|
||||||
# JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
# JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
||||||
# VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
# VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
||||||
# BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
# BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
||||||
@@ -196,7 +196,7 @@ services:
|
|||||||
# context: .
|
# context: .
|
||||||
# dockerfile: backend/services/results/results-service/Dockerfile
|
# dockerfile: backend/services/results/results-service/Dockerfile
|
||||||
# args:
|
# args:
|
||||||
# GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.2.1}"
|
# GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.3.1}"
|
||||||
# JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
# JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
||||||
# VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
# VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
||||||
# BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
# BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
||||||
@@ -242,7 +242,7 @@ services:
|
|||||||
# context: .
|
# context: .
|
||||||
# dockerfile: backend/services/scheduling/scheduling-service/Dockerfile
|
# dockerfile: backend/services/scheduling/scheduling-service/Dockerfile
|
||||||
# args:
|
# args:
|
||||||
# GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.2.1}"
|
# GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.3.1}"
|
||||||
# JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
# JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
||||||
# VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
# VERSION: "${DOCKER_VERSION:-1.0.0-SNAPSHOT}"
|
||||||
# BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
# BUILD_DATE: "${DOCKER_BUILD_DATE}"
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ services:
|
|||||||
context: . # Wichtig: Root Context für Monorepo Zugriff
|
context: . # Wichtig: Root Context für Monorepo Zugriff
|
||||||
dockerfile: config/docker/caddy/web-app/Dockerfile
|
dockerfile: config/docker/caddy/web-app/Dockerfile
|
||||||
args:
|
args:
|
||||||
GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.2.1}"
|
GRADLE_VERSION: "${DOCKER_GRADLE_VERSION:-9.3.1}"
|
||||||
JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
JAVA_VERSION: "${DOCKER_JAVA_VERSION:-25}"
|
||||||
# Frontend spezifisch:
|
# Frontend spezifisch:
|
||||||
CADDY_VERSION: "${DOCKER_CADDY_VERSION:-2.9-alpine}"
|
CADDY_VERSION: "${DOCKER_CADDY_VERSION:-2.9-alpine}"
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# 🧹 Troubleshooting Log: Gradle 9.x & KMP Docker Build (Part 2)
|
||||||
|
|
||||||
|
**Datum:** 02.02.2026
|
||||||
|
**Status:** ⚠️ BLOCKED (Docker Build Failure) / ✅ SUCCESS (Local Build)
|
||||||
|
**Thema:** `IsolatedKotlinClasspathClassCastException` im Docker-Build mit Gradle 9.3.1.
|
||||||
|
|
||||||
|
## 1. Zusammenfassung
|
||||||
|
Wir haben versucht, den Frontend-Build im Docker-Container zu stabilisieren. Lokal läuft der Build (`./gradlew build`) erfolgreich durch, inklusive WASM-Support und Runtime-Konfiguration. Im Docker-Container scheitert der Build jedoch hartnäckig an einem Plugin-Konflikt.
|
||||||
|
|
||||||
|
## 2. Das Problem
|
||||||
|
**Fehler:** `IsolatedKotlinClasspathClassCastException: The Kotlin Gradle plugin was loaded multiple times in different subprojects...`
|
||||||
|
**Kontext:** Gradle 9.2.1 / 9.3.1, Kotlin 2.3.0, Docker (ursprünglich `--no-daemon`).
|
||||||
|
|
||||||
|
### Analyse
|
||||||
|
* Der Fehler tritt auf, weil das `NodeJsRootPlugin` (transitiv via KMP) mehrfach initialisiert wird.
|
||||||
|
* **Lokal:** Der Gradle Daemon cached Classloader, wodurch das Plugin als "dasselbe" erkannt wird.
|
||||||
|
* **Docker:** Durch die Isolation (und vermutlich Caching-Artefakte) werden Plugin-Klassen mehrfach geladen und sind nicht cast-bar (`ClassCastException`).
|
||||||
|
|
||||||
|
## 3. Durchgeführte Maßnahmen & Ergebnisse
|
||||||
|
|
||||||
|
| Versuch | Maßnahme | Ergebnis (Docker) | Erkenntnis |
|
||||||
|
| :--- | :--- | :--- | :--- |
|
||||||
|
| **1. Root Force** | `apply<NodeJsRootPlugin>()` im Root `build.gradle.kts`. | ❌ FAILED | Timing-Problem im Docker, Plugin wird zu spät oder falsch geladen. |
|
||||||
|
| **2. KMP Root** | `alias(...) apply true` im Root + `kotlin { jvm() }`. | ❌ FAILED | `IsolatedKotlinClasspathClassCastException` bleibt. |
|
||||||
|
| **3. Central Mgmt** | `pluginManagement` in `settings.gradle.kts` + `id("...")` ohne Version in Subprojekten. | ❌ FAILED | Architektonisch sauberster Weg, aber löst das Classloader-Problem im Docker nicht. |
|
||||||
|
| **4. Daemon** | Entfernen von `--no-daemon` im Dockerfile. | ❌ FAILED | Daemon startet, aber der Fehler tritt trotzdem auf. |
|
||||||
|
| **5. Upgrade** | Upgrade auf Gradle 9.3.1. | ❌ FAILED | Fehler persistiert auch in der neuesten Version. |
|
||||||
|
| **6. Property** | `kotlin.mpp.allowMultiplePluginDeclarations=true`. | ❌ FAILED | Scheint in Gradle 9.x / KMP 2.3.0 wirkungslos zu sein. |
|
||||||
|
|
||||||
|
## 4. Status Quo
|
||||||
|
* **Lokal:** ✅ Build & Run funktionieren perfekt.
|
||||||
|
* **Docker:** ❌ Build bricht ab.
|
||||||
|
* **Architektur:** Wir haben jetzt eine sehr saubere Gradle-Konfiguration (Zentrales Plugin-Management), die wir beibehalten sollten.
|
||||||
|
|
||||||
|
## 5. Nächste Schritte (Hypothesen)
|
||||||
|
1. **Cache Corruption:** Die Docker-Layer (`--mount=type=cache`) könnten korrupte Gradle-Caches enthalten. Ein Build *ohne* Cache-Mounts muss getestet werden.
|
||||||
|
2. **Gradle 9 Inkompatibilität:** Es ist möglich, dass KMP 2.3.0 noch nicht vollständig kompatibel mit dem strikten Classpath-Isolation-Modus von Gradle 9 ist.
|
||||||
|
3. **Workaround:** Ein Downgrade auf Gradle 8.x wurde diskutiert, aber abgelehnt. Wir müssen einen Weg finden, Gradle 9 zu zähmen.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Dokumentiert durch Curator Agent.*
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.composeMultiplatform)
|
alias(libs.plugins.composeMultiplatform)
|
||||||
alias(libs.plugins.composeCompiler)
|
alias(libs.plugins.composeCompiler)
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.composeMultiplatform)
|
alias(libs.plugins.composeMultiplatform)
|
||||||
alias(libs.plugins.composeCompiler)
|
alias(libs.plugins.composeCompiler)
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
alias(libs.plugins.sqldelight)
|
alias(libs.plugins.sqldelight)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
* Es ist noch simpler.
|
* Es ist noch simpler.
|
||||||
*/
|
*/
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "at.mocode.clients.shared"
|
group = "at.mocode.clients.shared"
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|||||||
* Dieses Modul kapselt die gesamte UI und Logik für das Ping-Feature.
|
* Dieses Modul kapselt die gesamte UI und Logik für das Ping-Feature.
|
||||||
*/
|
*/
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.composeMultiplatform)
|
alias(libs.plugins.composeMultiplatform)
|
||||||
alias(libs.plugins.composeCompiler)
|
alias(libs.plugins.composeCompiler)
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
|||||||
* setzt sie zu einer lauffähigen Anwendung zusammen.
|
* setzt sie zu einer lauffähigen Anwendung zusammen.
|
||||||
*/
|
*/
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.kotlinMultiplatform)
|
// Fix for "Plugin loaded multiple times": Apply plugin by ID without version (inherited from root)
|
||||||
|
id("org.jetbrains.kotlin.multiplatform")
|
||||||
alias(libs.plugins.composeCompiler)
|
alias(libs.plugins.composeCompiler)
|
||||||
alias(libs.plugins.composeMultiplatform)
|
alias(libs.plugins.composeMultiplatform)
|
||||||
alias(libs.plugins.kotlinSerialization)
|
alias(libs.plugins.kotlinSerialization)
|
||||||
|
|||||||
@@ -71,3 +71,7 @@ enableWasm=false
|
|||||||
# See https://kotl.in/dokka-gradle-migration
|
# See https://kotl.in/dokka-gradle-migration
|
||||||
# org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers
|
# org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers
|
||||||
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
|
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
|
||||||
|
|
||||||
|
# Workaround for Gradle 9 / KMP "Plugin loaded multiple times" error in Docker/CI
|
||||||
|
# This allows subprojects to re-declare plugins even if they are already on the classpath
|
||||||
|
kotlin.mpp.allowMultiplePluginDeclarations=true
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -10,6 +10,15 @@ pluginManagement {
|
|||||||
maven("https://us-central1-maven.pkg.dev/varabyte-repos/public")
|
maven("https://us-central1-maven.pkg.dev/varabyte-repos/public")
|
||||||
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") } // Added snapshots for plugins
|
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") } // Added snapshots for plugins
|
||||||
}
|
}
|
||||||
|
plugins {
|
||||||
|
// Centralized Plugin Version Management
|
||||||
|
// This allows subprojects to apply plugins without versions, avoiding conflicts.
|
||||||
|
id("org.jetbrains.kotlin.multiplatform") version "2.3.0"
|
||||||
|
id("org.jetbrains.kotlin.plugin.serialization") version "2.3.0"
|
||||||
|
id("org.jetbrains.compose") version "1.10.0"
|
||||||
|
id("org.jetbrains.kotlin.plugin.compose") version "2.3.0"
|
||||||
|
id("app.cash.sqldelight") version "2.2.1"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
|
|||||||
Reference in New Issue
Block a user