You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMP项目中wasmJsMain构建时SQLDelight依赖解析失败求助

KMP项目中wasmJsMain构建时SQLDelight依赖解析失败求助

问题描述

我正在开发一个面向Android、iOS、Desktop和JS平台的KMP项目,按照官方文档集成了SQLDelight作为ORM。在Common模块的build.gradle中,我添加了插件并配置了数据库:

plugins {
  id("app.cash.sqldelight") version "2.0.2"
}

sqldelight {
    databases {
        create("Database") {
            packageName.set("ir.dorantech.kmp.data.database")
        }
    }
}

但构建项目时遇到了以下错误:

:composeApp:wasmJsMain: Could not resolve app.cash.sqldelight:runtime:2.0.2.
Required by: project :composeApp

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

我尝试寻找JS平台的解决方案,更新了配置如下:

sqldelight {
    databases {
        create("Database") {
            packageName.set("ir.dorantech.kmp.data.database")
            generateAsync.set(true)
        }
    }
}

但问题仍然没有解决,有没有人遇到过KMP项目中JS(WasmJS)目标使用SQLDelight的这个问题?求建议或解决方案。


解决方案

你好,我之前在KMP项目中处理WasmJS目标的SQLDelight依赖时也遇到过类似问题,这里给你几个可行的解决步骤:

1. 确保全局仓库配置正确

首先,SQLDelight的所有稳定版依赖都托管在Maven Central上,你需要在**项目根目录的settings.gradle.kts**中统一配置仓库,避免模块级仓库配置遗漏:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

不要仅在模块的build.gradle中配置仓库,全局配置能保证所有平台目标(包括WasmJS)都能访问到依赖源。

2. 为WasmJS目标添加专属驱动依赖

WasmJS与普通JS的SQLDelight驱动不同,你需要在模块的build.gradle.kts中为wasmJsMain源码集单独添加Wasm专属的驱动和异步依赖(因为你开启了generateAsync.set(true)):

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                // Common模块引入基础SQLDelight runtime
                implementation("app.cash.sqldelight:runtime:2.0.2")
            }
        }
        val wasmJsMain by getting {
            dependencies {
                // WasmJS专属的SQLite驱动
                implementation("app.cash.sqldelight:sqlite-wasm-driver:2.0.2")
                // 异步生成对应的runtime依赖
                implementation("app.cash.sqldelight:async-runtime:2.0.2")
            }
        }
    }
}

这是导致Gradle无法解析的核心原因:你之前仅修改了SQLDelight的代码生成配置,但未添加Wasm平台所需的具体依赖。

3. 清理Gradle缓存并重新构建

有时候Gradle的本地缓存会导致依赖解析异常,执行以下命令强制刷新依赖并清理缓存:

./gradlew clean build --refresh-dependencies

4. 可选:升级SQLDelight版本

如果以上步骤仍未解决问题,可以尝试将SQLDelight升级到更近期的稳定版(如2.1.1),新版本对WasmJS的兼容性更好,配置也更简洁。

按照这些步骤操作后,WasmJS目标的SQLDelight依赖解析问题应该就能解决了。


备注:内容来源于stack exchange,提问作者Ali Doran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:13:01