You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动下载的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:06:38