Kotlin/Native项目添加Guava依赖后无法导入类的问题
问题原因
Guava的32.1.3-jre版本是仅针对JVM平台的Java字节码依赖,而你的项目包含Kotlin/Native目标(linuxX64、mingwX64)。Kotlin/Native无法直接使用Java的JAR包,你在commonMain中添加Guava依赖,会导致原生平台构建时无法解析Java类,从而抛出Unresolved reference: com错误。
而kotlinx.collections.immutable是官方提供的多平台库,对JVM、Native等目标都有适配,所以能正常导入使用。
解决方案
方案1:仅在JVM平台使用Guava
如果你的Guava使用场景只限于JVM目标,把Guava依赖从commonMain移到jvmMain中:
修改后的sourceSets配置:
sourceSets { get("commonMain").apply { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.6") // 移除这里的Guava依赖 } } // ... 其他sourceSet配置不变 get("jvmMain").apply { dependsOn(sourceSets["commonMain"]) dependencies { // 仅JVM平台添加Guava依赖 implementation("com.google.guava:guava:32.1.3-jre") } } }
同时删除根级别dependencies块中的Guava配置(多平台项目依赖应配置在对应sourceSet下)。
之后在JVM平台的代码中可以正常导入使用Guava,而Native平台代码则避免使用Guava类。
方案2:为Native平台找替代方案
如果Native平台也需要类似ImmutableDoubleArray的功能,可选择以下方式:
- 使用
kotlinx.collections.immutable提供的不可变集合类,比如ImmutableList<Double>,它对Native平台完全支持 - 自行实现一个轻量的不可变双精度数组类,适配Native平台
- 寻找支持Kotlin/Native的第三方不可变集合库
验证操作
修改配置后,执行以下命令重新构建:
gradle clean build
内容的提问来源于stack exchange,提问作者user3617992
相关产品推荐
相关产品推荐

