构建Kotlin Multiplatform库:公共代码跨模块导入异常求助
检查Maven发布配置的构件完整性
KMP的common模块核心依赖-metadata.jar构件实现跨平台API共享,若发布时未生成或上传该构件,依赖方common模块就拿不到完整类定义。
确保build.gradle.kts中用Kotlin自动生成的组件配置发布,不要手动拆分构件:publishing { publications { create<MavenPublication>("maven") { from(components["kotlin"]) } } }这个配置会自动处理common metadata、Android、Desktop等所有目标的构件打包与上传。
验证JFrog仓库的构件内容
登录JFrog查看你的SDK构件包,确认存在[artifactId]-[version]-metadata.jar,解压后检查是否包含commonMain下所有类的.kotlin_metadata或.class文件。如果缺失或内容不全,说明SDK编译时commonMain的编译任务未正常执行,要检查源码集配置、依赖是否有冲突。修正依赖库的声明方式
依赖SDK的库中,common模块的依赖要正确声明在commonMain源码集下:sourceSets { val commonMain by getting { dependencies { implementation("your.group.id:your-sdk-artifact:version") } } }不要只在Android模块单独加依赖,确保common模块能拉到包含metadata的完整SDK构件。
清理IDE缓存与同步Gradle
IntelliJ 2022.1.x对KMP的缓存可能出问题,试试这几步:- 点击
File -> Invalidate Caches...选择“Invalidate and Restart”清空缓存 - 执行Gradle面板的
Refresh all Gradle projects重新同步 - 确认依赖库和SDK的Gradle wrapper版本一致,避免版本不兼容导致构件解析异常
- 点击
对齐Compose Multiplatform版本配置
你用的是Compose 1.2 Alpha版本,必须保证SDK和依赖库的Kotlin版本、Compose插件版本严格匹配(Kotlin 1.7.10对应Compose 1.2.0-alpha06及以上)。另外检查SDK的commonMain是否引用了仅Android/Desktop可用的Compose API,这类代码会导致metadata生成不完整。
内容的提问来源于stack exchange,提问作者Kerry

