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

关于kotlin - 为什么 Kotlin 需要在编译后捆绑其运行时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565036/

相关文章:

android - kotlin协程耗时超过一定时间如何取消?

android - 如何在抽屉导航顶部创建工具栏(Android/kotlin)

android - 这段代码this@MainActivity是什么意思?

android - 如何将值传递给viewPagerAdapter?

kotlin - 移至androidX后出现“inferred type is FragmentManager? but FragmentManager was expected”错误

java - 如何从以转义字符命名的 Java Kotlin 方法中调用?

java - Kotlin 中的哪些语言功能可能导致内存泄漏?

android - 重复类 androidx.appcompat :appcompat

spring-boot - 如何使用Jackson和java.time解析不同的ISO日期/时间格式?

android - 让协程等待以前的调用