为何KMM项目中SQLDelight的generateSqlDelightSchema任务不可见?
generateSqlDelightSchema 任务不可见的原因及解决办法 可能的原因
1. SQLDelight版本与文档版本不匹配
你参考的是2.0.2版本的文档,但如果项目中使用的是2.1.0及以上版本的SQLDelight,generateSqlDelightSchema这个通用任务已被移除,替换为针对单个数据库的命名任务:generate<DatabaseName>Schema。比如你的数据库名为ContentHuntDatabase,对应的任务名应为generateContentHuntDatabaseSchema。
2. deriveSchemaFromMigrations = true 的配置影响
当开启deriveSchemaFromMigrations时,SQLDelight会从迁移文件自动推导schema,而非依赖主schema文件。这种情况下,通用的generateSqlDelightSchema任务不会被创建,你需要使用对应数据库的专属schema生成任务。
3. Gradle缓存或任务未刷新
Gradle的缓存可能导致新任务未被识别,或者直接执行./gradlew tasks时未显示所有分组任务。SQLDelight的任务都属于sqldelight分组,默认不会在全局任务列表中展示。
4. 任务命名规则变更
从SQLDelight 2.1.0开始,所有数据库相关任务都采用[action]<DatabaseName>[suffix]的命名格式,不再使用全局通用任务名,避免多数据库项目中的任务冲突。
解决步骤
- 查看所有SQLDelight相关任务
执行以下命令列出所有SQLDelight分组的任务:
./gradlew tasks --group=sqldelight
在输出中查找类似generateContentHuntDatabaseSchema的任务,这就是你需要的schema生成任务。
确认SQLDelight版本
检查项目根目录的build.gradle.kts或build.gradle中SQLDelight的版本,若版本≥2.1.0,直接使用数据库专属任务名。刷新Gradle缓存
执行以下命令清理缓存并重新同步项目:
./gradlew clean build --refresh-dependencies
之后再次执行任务列表命令查看是否能找到目标任务。
- 调整配置(可选)
如果不需要从迁移推导schema,可以临时关闭deriveSchemaFromMigrations = true,但这会失去从迁移自动生成schema的功能,仅建议用于验证任务是否存在。
内容的提问来源于stack exchange,提问作者Georg Prohaska

