SQLDelight 多平台如果在单独的模块中则不生成模式

SQLDelight multiplatform not generating schema if it is in a separate module

我已经模块化了我的共享代码,所以目前我有一个 shared 模块 (kmp),在这个模块中我有 shared:coreshared:database(也是多平台的)。
如果我在共享模块中设置数据库,它会工作:我将我的 AppDatabase.sq 放在共享的 commonMain 文件夹中,在 sqldelight/com/example/kmmbase/database/ 中并正确生成模式。
另一方面,如果我尝试将它移动到 shared:database 模块,它不会生成模式,驱动程序也不会编译。我将 AppDatabase.sq 文件添加到相同的路径,但现在在 shared:database 模块的 commonMain 中,我将 sqldelight 插件和 gradle 配置从 shared gradle 文件到 shared:database gradle 文件。
我的 gradle 配置如下:

sqldelight {
    database("AppDatabase") {
        packageName = "com.example.kmmbase.database"
        sourceFolders = listOf("sqldelight")
    }
}

我已经为 .sq 文件尝试了不同的位置,并且在每个位置上我都匹配 gradle 配置的 packageName:

知道我可能做错了什么吗?

编辑:这是 a repo 和代码。

tldr;

根据您当前的存储库结构,您在 src/commonMain/kotlin 中有 sqldelight 目录。但是,在您的情况下,它应该与 kotlin 处于同一水平 /shared/database/src/commonMain/sqldelight

完整答案

每个 gradle 模块都有自己的 build.gradle.kts 文件。加载插件 com.squareup.sqldelight 的那个也是将查看相应源文件的那个。话虽如此,如果您希望 .sq 文件位于 :shared:database 模块中,则必须检查以下部分:

  1. sqldelight 插件包含在 /shared/database/build.gradle.kts
  2. sqldelight配置在/shared/database/build.gradle.kts
  3. sqldelight 的配置中,有一个选项可以使用 sourceFolders 属性覆盖默认的源文件夹 sqldelight。默认情况下和他上面的配置是 /shared/database/src/commonMain/sqldelight
  4. 在配置的源文件夹中,你必须使用配置中定义的包结构(就像 packageName com.example 你会有目录 /shared/database/src/commonMain/sqldelight/com/example/MySQLFile.sq (虽然不是很确定这一步)