Gradle如何自动选择带-jvm后缀的依赖?迁移Bazel遇问题
Gradle自动选择带-jvm后缀Kotlin多平台构件的原理
这本质是Gradle对Kotlin多平台库的内置适配逻辑,核心原因有这几点:
Kotlin多平台构件的命名规则:Kotlin多平台项目会发布多个平台专属构件,比如
-jvm对应JVM平台、-js对应JS平台,而不带后缀的是个「空构件」——它只有POM配置文件,没有实际代码,作用是作为所有平台构件的统一入口,方便跨平台项目依赖。你用的io.kotest:kotest-runner-junit5:5.4.2就是这个空构件。Gradle的自动平台匹配:Gradle针对Kotlin多平台库做了特殊处理,当你在JVM项目里声明不带平台后缀的依赖时,它会自动读取空构件的POM文件,识别出对应JVM平台的构件(也就是带
-jvm后缀的版本),然后自动替换依赖,拉取实际包含代码的JVM构件。Bazel的差异:Bazel没有内置这种针对Kotlin多平台库的自动解析逻辑,它只会严格按照你写的依赖坐标拉取构件。如果你写的是空构件坐标,它就只会拉取那个没有代码的POM文件,自然会出现「库不存在」的编译错误,必须显式指定带
-jvm后缀的完整坐标才行。
内容的提问来源于stack exchange,提问作者caeus
相关产品推荐
相关产品推荐

