maven Kotlin/JS JAR文件在手动下载时不包含JS文件,为什么?

oo7oh9g9  于 2023-03-01  发布在  Maven
关注(0)|答案(1)|浏览(165)

如果我从https://search.maven.org/artifact/org.jetbrains.kotlinx/kotlinx-serialization-core/1.3.3/pomhttps://mvnrepository.com/artifact/org.jetbrains.kotlin-wrappers/kotlin-wrappers-bom/1.0.0-pre.501手动下载Kotlin/JS JAR文件,则编译后的JS文件不会出现在JAR文件中。但是,如果我通过Gradle获取这些文件并 checkout 外部库的内容,则编译后的JS文件会出现。
我以为这是同一个JAR文件,但显然不是。JAR文件是根据Gradle的特定请求动态创建的吗?也许是这样,因为Gradle下载的JS文件只包含LEGACY输出,这与我的项目仍然使用LEGACY进行编译的情况相符。
我这样问是因为Kotlin/JS可以“同时”用两个编译器编译(IR和LEGACY都用),我想看看编译后的JS文件在第三方库中使用时是如何结构化的。

ldioqlga

ldioqlga1#

您可能正在查看多平台模块发布,而不是实际的JS发布。
多平台模块利用Gradle变体机制来查找需要下载的实际工件(基于一组属性)。在第一个链接和browsing the actual files之后,您将看到一个.module文件。该文件是一个JSON文件,描述了工件及其属性的列表,Gradle将查看该文件以了解要下载的内容。
例如,在.module文件中的某个位置,您将看到:

{
  "name": "jsLegacyApiElements-published",
  "attributes": {
    "org.gradle.category": "library",
    "org.gradle.usage": "kotlin-api",
    "org.jetbrains.kotlin.js.compiler": "legacy",
    "org.jetbrains.kotlin.platform.type": "js"
  },
  "available-at": {
    "url": "../../kotlinx-serialization-core-js/1.3.3/kotlinx-serialization-core-js-1.3.3.module",
    "group": "org.jetbrains.kotlinx",
    "module": "kotlinx-serialization-core-js",
    "version": "1.3.3"
  }
}

因此,如果您实际上转到后缀为-js的工件(url字段指向的地方)而不是模块工件,您将发现包含JS代码的jar:https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-serialization-core-js/1.3.3/

相关问题