kotlin - 为什么 Kotlin 需要在编译后捆绑其运行时?

我只是想了解底层架构,我认为我错了。

学习教程here举个例子。

当我这样做时:

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

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

最佳答案

当您使用 Java 编写应用程序时,您需要依赖所有标准类库。 java. 类(例如 java.lang.*java.util.* ...)包含在每个 JRE 中,因此您不需要自己打包。

Kotlin 包含自己的标准类库(Kotlin 运行时),独立于 Java 类库。要分发可供任何人使用普通旧 JRE 运行的 jar 文件,您还需要捆绑 Kotlin 运行时。

如果您没有捆绑 Kotlin 运行时,那么您的用户在执行应用程序时必须确保 Kotlin 运行时位于类路径中。您链接的页面提供了这种情况的示例:

Compiling a library

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 运行时,以便您的应用程序是独立的。

https://stackoverflow.com/questions/30565036/

相关文章:

kotlin - Kotlin 中的静态方法导入

jpa - kotlin 数据类 + bean 验证 jsr 303

android - ListAdapter 未更新 RecyclerView 中的项目

function - 为什么不能使用 'kotlin.Result' 作为返回类型?

java - Kotlin 中的错误但仅使用 Java - 类 kotlin.reflect.jvm

kotlin - Kotlin 的不稳定属性?

java - Kotlin 属性的私有(private) getter 和 public sette

android - 警告 : warning: Supported source version '

initialization - 为什么 Kotlin 不允许将 lateinit 与原始类型一起使

java - 在 Android Studio 中将 "java"目录重命名为 "kotlin"