手动下载的Kotlin/JS JAR无JS文件,Gradle获取却存在?原因何在?
Kotlin/JS库JAR差异与多编译器输出结构解析
为什么手动下载的JAR没有JS文件?
- 你从Maven仓库手动下载的是纯元数据/字节码JAR,这类JAR仅包含Kotlin元数据、Java字节码(若有)和依赖描述,本身不包含编译后的JS产物。
- Gradle借助Kotlin/JS插件的逻辑,会自动识别库的分类器(Classifier),下载对应编译模式的专属JAR包——比如适配LEGACY模式的JAR会带有
kotlin-js分类器,这类JAR才包含编译完成的JS文件、SourceMap等产物。
Gradle不是动态生成JAR,而是精准匹配下载对应变体
Maven仓库中的Kotlin/JS库会发布多个不同的JAR变体:
- 主JAR(无分类器):仅存放元数据,用于依赖解析、跨平台场景共享
- 带
kotlin-js分类器的JAR:对应LEGACY编译模式的JS产物 - 带
kotlin-js-ir分类器的JAR:对应IR编译模式的JS产物
Gradle的Kotlin/JS插件会根据你的项目编译配置(LEGACY/IR/BOTH),自动拉取匹配的变体JAR,并非动态生成文件。
第三方库启用BOTH配置时的JS文件结构
当库作者用BOTH配置编译并发布时,Maven仓库会同时推送LEGACY和IR两个变体的JAR:
- LEGACY变体JAR:内部通常在
META-INF/resources/webjars/[库名]/[版本]/路径下存放JS文件,同时附带对应的.js.map(源码映射文件)、.meta.js(Kotlin元数据文件) - IR变体JAR:结构类似,但产物是针对IR编译器优化的JS代码,文件名或路径往往会带有
ir标识 - 主JAR依旧只保留元数据,用于Gradle自动匹配项目编译模式,拉取对应的变体产物
如果你的项目配置为BOTH,Gradle会同时下载两个变体的JAR,在构建过程中根据目标编译模式,分别调用对应的JS产物。
内容的提问来源于stack exchange,提问作者Jarl
相关产品推荐
相关产品推荐

