我只是想理解底层架构,我想我弄错了.

Taking the tutorial here as the example.

当我这么做的时候:

kotlinc-jvm hello.kt -include-runtime -d hello.jar

如果编译器已经将代码转换为Java字节码,为什么需要将Kotlin运行时Bundle 到jar中?

推荐答案

当您用Java编写应用程序时,您将依赖于所有标准类库.这java.个班(例如java.lang.*java.util.*.)都包含在每个JRE中,所以您不需要自己打包它们.

Kotlin包含自己的标准类库(Kotlin runtime),与Java类库分开.要分发任何人都可以使用普通的旧JRE运行的jar文件,还需要Bundle Kotlin运行时.

如果您没有Bundle Kotlin运行时,那么在执行应用程序时,您的用户必须确保Kotlin运行时位于类路径上.您链接的页面提供了此方案的示例:

编辑图书馆

If you’re developing a library to be used by other Kotlin applications, you can produce the .jar file without including the Kotlin runtime into it.

$ kotlinc-jvm hello.kt -d hello.jar

如果您针对的是其他Kotlin用户,那么可以合理地假设他们已经拥有了Kotlin运行时.但是,如果您试图为最终用户部署应用程序,那么您希望包含Kotlin运行时,以便应用程序是自包含的.

Kotlin相关问答推荐

为什么";";.equals(1)在柯特林语中是有效的,但";";=1是无效的?

在构造函数中创建内部类实例时,只能使用包含类的接收器调用内部类的构造函数

通过快捷键手动砍掉功能参数等

使用 StateFlow 时如何移除监听器?

Kotlin:我可以将函数分配给 main 的伴随对象中的变量吗?

在 Kotlin 中,::class.simpleName是做什么的?

compareBy 如何使用布尔表达式在 kotlin 中工作

如何在kotlin中使用协程每秒调用一个函数

有没有办法重用 Job 实例?

为什么 Kotlin 需要函数引用语法?

Kotlin 1.2.21 + SimpleXml 2.3.0 - consume List error (must mark set get method)

Android Studio 4.0.0 Java 8 库在 D8 和 R8 构建错误中脱糖

androidx.core:core-ktx:1.0.0 小部件包丢失

使用 Paging 3 时保存并保留 LazyColumn 滚动位置

如何捕获传递给模拟函数的参数并返回它?

如何在 Jetpack Compose 的 LazyColumn/LazyRow 中禁用和启用滚动?

如何在Kotlin中获得KType?

Kotlin lambda 语法混淆

在 Kotlin 中编写一个等于 Int.MIN_VALUE 的十六进制整数文字

Kotlin 中的限制函数