Kotlin多平台项目针对浏览器(WebAssembly)目标的Ktor依赖解析问题
嘿,我之前在做KMP Wasm项目的时候也碰到过几乎一模一样的Ktor依赖问题,给你几个实际试过有效的排查和解决方向:
补全Wasm平台专属的Ktor客户端引擎依赖
你看到的变体不匹配错误,核心原因是Ktor的通用模块(比如content-negotiation)需要配合对应平台的客户端引擎才能正常工作。在composeApp模块的build.gradle.kts里,除了在commonMain里声明通用的content-negotiation依赖,还得在wasmJsMain里添加Wasm专属的Ktor客户端引擎依赖:kotlin { sourceSets { val commonMain by getting { dependencies { implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion") implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion") } } val wasmJsMain by getting { dependencies { // 添加Wasm平台的Ktor客户端引擎 implementation("io.ktor:ktor-client-wasm:$ktorVersion") } } } }一定要保证
ktorVersion和你用的2.3.9完全一致,版本不兼容也会触发变体匹配失败。检查Kotlin与Ktor的版本兼容性
Ktor 2.3.9要求Kotlin版本至少在1.9.20及以上,如果你的项目用的Kotlin版本低于这个,很可能会因为属性不匹配导致依赖解析失败。可以在项目根目录的build.gradle.kts里确认Kotlin插件版本:plugins { alias(libs.plugins.kotlin.multiplatform) version "1.9.20" apply false // 其他插件配置... }清理Gradle缓存并强制刷新依赖
有时候Gradle的本地缓存会残留旧的依赖元数据,导致解析异常。先运行以下命令清理缓存并刷新:./gradlew clean build --refresh-dependencies之后再尝试执行
wasmJsBrowserRun -t --quiet。确认Wasm目标的Gradle配置完整性
确保你的WasmJs平台配置是完整的,比如有没有声明可执行二进制文件:kotlin { wasmJs { browser { commonWebpackConfig { outputFileName = "app.js" } } binaries.executable() } // 其他平台配置... }
你之前碰到的错误日志里提到的“consumer was configured to find a library for use during 'kotlin-runtime', preferably optimized for non-jvm”,本质就是平台专属的依赖缺失,导致Gradle找不到符合Wasm目标的变体。按上面的步骤调整后,应该能解决这个问题。
备注:内容来源于stack exchange,提问作者Suraj Sharma

