SQLDelight 多平台如果在单独的模块中则不生成模式
SQLDelight multiplatform not generating schema if it is in a separate module
我已经模块化了我的共享代码,所以目前我有一个 shared
模块 (kmp),在这个模块中我有 shared:core
和 shared: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:
- sqldelight/com/example/kmmbase/shared/
- sqldelight/com/example/kmmbase/database/
- sqldelight/com/example/database/
- sqldelight/com/example/database/数据库/
- sqldelight/database/
- ...
知道我可能做错了什么吗?
编辑:这是 a repo 和代码。
tldr;
根据您当前的存储库结构,您在 src/commonMain/kotlin
中有 sqldelight
目录。但是,在您的情况下,它应该与 kotlin
处于同一水平 /shared/database/src/commonMain/sqldelight
。
完整答案
每个 gradle 模块都有自己的 build.gradle.kts
文件。加载插件 com.squareup.sqldelight
的那个也是将查看相应源文件的那个。话虽如此,如果您希望 .sq
文件位于 :shared:database
模块中,则必须检查以下部分:
sqldelight
插件包含在 /shared/database/build.gradle.kts
中
sqldelight
配置在/shared/database/build.gradle.kts
- 在
sqldelight
的配置中,有一个选项可以使用 sourceFolders
属性覆盖默认的源文件夹 sqldelight
。默认情况下和他上面的配置是 /shared/database/src/commonMain/sqldelight
- 在配置的源文件夹中,你必须使用配置中定义的包结构(就像 packageName
com.example
你会有目录 /shared/database/src/commonMain/sqldelight/com/example/MySQLFile.sq
(虽然不是很确定这一步)
我已经模块化了我的共享代码,所以目前我有一个 shared
模块 (kmp),在这个模块中我有 shared:core
和 shared: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:
- sqldelight/com/example/kmmbase/shared/
- sqldelight/com/example/kmmbase/database/
- sqldelight/com/example/database/
- sqldelight/com/example/database/数据库/
- sqldelight/database/
- ...
知道我可能做错了什么吗?
编辑:这是 a repo 和代码。
tldr;
根据您当前的存储库结构,您在 src/commonMain/kotlin
中有 sqldelight
目录。但是,在您的情况下,它应该与 kotlin
处于同一水平 /shared/database/src/commonMain/sqldelight
。
完整答案
每个 gradle 模块都有自己的 build.gradle.kts
文件。加载插件 com.squareup.sqldelight
的那个也是将查看相应源文件的那个。话虽如此,如果您希望 .sq
文件位于 :shared:database
模块中,则必须检查以下部分:
sqldelight
插件包含在/shared/database/build.gradle.kts
中
sqldelight
配置在/shared/database/build.gradle.kts
- 在
sqldelight
的配置中,有一个选项可以使用sourceFolders
属性覆盖默认的源文件夹sqldelight
。默认情况下和他上面的配置是/shared/database/src/commonMain/sqldelight
- 在配置的源文件夹中,你必须使用配置中定义的包结构(就像 packageName
com.example
你会有目录/shared/database/src/commonMain/sqldelight/com/example/MySQLFile.sq
(虽然不是很确定这一步)