在Compose Multiplatform中使用Ktor CIO客户端遇依赖解析错误求助
解决Compose Multiplatform中Ktor-CIO依赖解析错误
问题根源
- 平台专属依赖放错位置:
ktor-client-cio是仅支持JVM/Desktop的专属引擎,你把它加到了commonMain的依赖bundle里,导致Wasm平台编译时找不到对应变体。 - Ktor版本不一致:项目同时使用了Ktor 2.3.10和3.2.0两个版本,跨版本依赖会引发兼容性问题。
解决方案
1. 统一Ktor版本并调整依赖配置
修改libs.versions.toml,将所有Ktor依赖统一到同一稳定版本(示例用3.2.0),并把CIO从通用bundle中移除:
ktor = "3.2.0" ktor-client-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" } ktor-client-contentNegotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" } ktor-client-android = { group = "io.ktor", name = "ktor-client-android", version.ref = "ktor" } ktor-client-darwin = { group = "io.ktor", name = "ktor-client-darwin", version.ref = "ktor" } ktor-client-js = { group = "io.ktor", name = "ktor-client-js", version.ref = "ktor" } [bundles] ktor-client = ["ktor-client-core", "ktor-client-contentNegotiation" /* 仅保留跨平台通用依赖 */]
2. 拆分平台专属依赖
在composeApp/build.gradle.kts中,给不同平台的sourceSet配置对应专属的Ktor引擎,common只保留通用依赖:
kotlin { sourceSets { val desktopMain by getting val wasmJsMain by getting // 确保Wasm源集已配置 commonMain.dependencies { // ... 其他通用依赖 implementation(libs.bundles.ktor.client) // 仅包含core、contentNegotiation等跨平台模块 } androidMain.dependencies { // ... 其他Android依赖 implementation(libs.ktor.client.android) // Android专属引擎 } iosMain.dependencies { // ... 其他iOS依赖 implementation(libs.ktor.client.darwin) // iOS专属引擎 } desktopMain.dependencies { // ... 其他Desktop依赖 implementation(libs.ktor.client.cio) // Desktop专属CIO引擎 } wasmJsMain.dependencies { implementation(libs.ktor.client.js) // Wasm专属JS引擎 } } }
3. 同步验证
执行Gradle同步操作后,重新构建项目,Wasm平台的依赖解析错误将被修复。
关键说明
- Ktor客户端引擎是平台专属的:CIO仅支持JVM/Desktop,Android用
ktor-client-android,iOS用ktor-client-darwin,Wasm用ktor-client-js,不能在common源集中引用这些专属引擎。 - 必须保持Ktor所有模块版本一致,否则会出现二进制不兼容问题。
内容的提问来源于stack exchange,提问作者JunJaBoy
相关产品推荐
相关产品推荐

