02317e6c00
Deactivated WebAssembly configurations in relevant modules due to stability concerns with JS compatibility. Updated Gradle scripts to comment out related dependencies and tasks while preserving the initial implementation for future reactivation.
174 lines
4.7 KiB
Kotlin
174 lines
4.7 KiB
Kotlin
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)
|
|
|
|
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
|
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
|
|
|
/**
|
|
* Dieses Modul ist der "Host". Es kennt alle Features und die Shared-Module und
|
|
* setzt sie zu einer lauffähigen Anwendung zusammen.
|
|
*/
|
|
plugins {
|
|
alias(libs.plugins.kotlinMultiplatform)
|
|
alias(libs.plugins.composeCompiler)
|
|
alias(libs.plugins.composeMultiplatform)
|
|
alias(libs.plugins.kotlinSerialization)
|
|
}
|
|
|
|
kotlin {
|
|
// Toolchain is now handled centrally in the root build.gradle.kts
|
|
|
|
// JVM Target für Desktop
|
|
jvm {
|
|
binaries {
|
|
executable {
|
|
mainClass.set("MainKt")
|
|
}
|
|
}
|
|
}
|
|
|
|
// JavaScript Target für Web
|
|
js(IR) {
|
|
browser {
|
|
commonWebpackConfig {
|
|
cssSupport { enabled = true }
|
|
// Webpack-Mode abhängig von Build-Typ
|
|
mode = if (project.hasProperty("production"))
|
|
KotlinWebpackConfig.Mode.PRODUCTION
|
|
else
|
|
KotlinWebpackConfig.Mode.DEVELOPMENT
|
|
}
|
|
|
|
webpackTask {
|
|
mainOutputFileName = "web-app.js"
|
|
}
|
|
|
|
// Development Server konfigurieren
|
|
runTask {
|
|
mainOutputFileName.set("web-app.js")
|
|
}
|
|
// Browser-Tests komplett deaktivieren (Configuration Cache kompatibel)
|
|
testTask {
|
|
// enabled = false
|
|
|
|
useKarma {
|
|
useChromeHeadless()
|
|
environment("CHROME_BIN", "/usr/bin/google-chrome-stable")
|
|
}
|
|
}
|
|
}
|
|
binaries.executable()
|
|
}
|
|
|
|
// Wasm vorerst deaktiviert
|
|
/*
|
|
@OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class)
|
|
wasmJs {
|
|
browser()
|
|
binaries.executable()
|
|
}
|
|
*/
|
|
|
|
sourceSets {
|
|
commonMain.dependencies {
|
|
// Shared modules
|
|
implementation(projects.frontend.shared)
|
|
implementation(projects.frontend.core.designSystem)
|
|
implementation(projects.frontend.core.navigation)
|
|
implementation(projects.frontend.core.network)
|
|
implementation(project(":frontend:core:local-db"))
|
|
implementation(projects.frontend.features.authFeature)
|
|
implementation(projects.frontend.features.pingFeature)
|
|
|
|
// DI (Koin) needed to call initKoin { modules(...) }
|
|
implementation(libs.koin.core)
|
|
implementation(libs.koin.compose)
|
|
implementation(libs.koin.compose.viewmodel)
|
|
|
|
// Compose Multiplatform
|
|
implementation(compose.runtime)
|
|
implementation(compose.foundation)
|
|
implementation(compose.material3)
|
|
implementation(compose.ui)
|
|
implementation(compose.components.resources)
|
|
implementation(compose.materialIconsExtended)
|
|
|
|
// Bundles (Cleaned up dependencies)
|
|
implementation(libs.bundles.kmp.common) // Coroutines, Serialization, DateTime
|
|
implementation(libs.bundles.compose.common) // ViewModel & Lifecycle
|
|
}
|
|
|
|
jvmMain.dependencies {
|
|
implementation(compose.desktop.currentOs)
|
|
implementation(libs.kotlinx.coroutines.swing)
|
|
implementation(libs.koin.core)
|
|
}
|
|
|
|
jsMain.dependencies {
|
|
implementation(compose.html.core)
|
|
}
|
|
|
|
/*
|
|
val wasmJsMain = getByName("wasmJsMain")
|
|
wasmJsMain.dependencies {
|
|
implementation(libs.ktor.client.js) // WASM verwendet JS-Client [cite: 7]
|
|
|
|
// Compose für shared UI components für WASM
|
|
implementation(compose.runtime)
|
|
implementation(compose.foundation)
|
|
implementation(compose.material3)
|
|
}
|
|
*/
|
|
|
|
commonTest.dependencies {
|
|
implementation(libs.kotlin.test)
|
|
}
|
|
}
|
|
}
|
|
|
|
// KMP Compile-Optionen
|
|
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
|
|
compilerOptions {
|
|
jvmTarget.set(JvmTarget.JVM_25)
|
|
freeCompilerArgs.addAll(
|
|
"-opt-in=kotlin.RequiresOptIn",
|
|
"-Xskip-metadata-version-check", // Für bleeding-edge Versionen
|
|
// Suppress beta warning for expect/actual declarations used in this module
|
|
"-Xexpect-actual-classes"
|
|
)
|
|
}
|
|
}
|
|
|
|
// Configure a duplicate handling strategy for distribution tasks
|
|
tasks.withType<Tar> {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
}
|
|
|
|
tasks.withType<Zip> {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
}
|
|
|
|
// Duplicate-Handling für Distribution
|
|
tasks.withType<Copy> {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE // Statt EXCLUDE
|
|
}
|
|
|
|
tasks.withType<Sync> {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
}
|
|
|
|
// Desktop Application Configuration
|
|
compose.desktop {
|
|
application {
|
|
mainClass = "MainKt"
|
|
|
|
nativeDistributions {
|
|
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
|
|
packageName = "Meldestelle"
|
|
packageVersion = "1.0.0"
|
|
description = "Meldestelle Development App"
|
|
}
|
|
}
|
|
}
|