为何SQLDelight长packageName会导致import别名as后换行编译报错
问题答案
是的,SQLDelight 1.5.x版本的代码生成逻辑确实内置了最大行长度限制,你遇到的编译错误就是该行长度校验逻辑的bug导致的。
根因说明
- 1.5.2版本的SQLDelight代码生成器在处理跨模块数据库依赖时,如果两个模块的数据库实例重名,会自动为依赖的数据库生成带别名的导入语句。当导入语句总长度超过内置的行长度阈值时,生成器会错误地将换行符插在
as关键字和别名之间,违反Kotlin语法规范,因此触发Expecting identifier报错。 - 当
packageName较短时,导入语句总长度未触发行拆分阈值,因此不会出现该问题,和你观测到的表现一致。
可行解决方案
方案1:升级SQLDelight版本
该bug已在SQLDelight 1.5.4及后续版本修复,直接升级依赖版本即可彻底解决问题,无需修改其他业务配置。
方案2:缩短标识符长度(临时兼容方案)
如果当前项目暂时无法升级SQLDelight版本,可以通过调整配置缩短导入语句长度,避免触发行拆分逻辑:
- 缩短两个模块数据库配置的
packageName路径长度 - 给模块A的SQLDelight数据库设置更短的命名,减少导入语句总长度
方案3:规避重名场景
给模块B的SQLDelight数据库指定和模块A不同的命名,无需生成带别名的导入语句,从根源上规避该问题,示例配置如下:
sqldelight { // 此处命名与模块A的SomeExampleDb不重复即可 AccountExampleDb { packageName = "com.example.exampleapp.feature.account.datasource.example.localstorage" dependency(project(":moduleA")) } }
内容的提问来源于stack exchange,提问作者dees91
相关产品推荐
相关产品推荐

