kotlinc与kotlinc-jvm的编译和kotlin与java的运行

vsmadaxz  于 2022-11-07  发布在  Kotlin
关注(0)|答案(1)|浏览(437)

我刚刚安装了Kotlin版本1.7.0,bin文件夹中有以下可运行文件。

  • kotlinc
  • kotlin-jvm
  • kotlin

快速检查后发现,kotlinckotlin-jvm是用来将代码编译成字节码的,就像Java中的javac一样。为什么kotlin编译有两个命令,有什么明显的区别吗?
而且,我应该使用java命令来运行字节码还是使用kotlin命令来运行字节码。

sdnqo3pr

sdnqo3pr1#

官方的docs并没有对这些命令行工具说太多, 虽然你可以用-help来调用它们,但这只是描述了它们接受的其他选项。
然而,我可以告诉你在我的系统上发生了什么(macOS,其中Kotlin是使用HomeBrew安装的)。 我不知道下面的内容有多少适用于其他平台,但我怀疑至少Windows和Linux会非常相似。
这些可执行文件是 Package 器脚本,因此可以看到它们的一些功能。 (它们最终运行Kotlin程序,这限制了您所能看到的内容...) 
正在编译:
kotlinc-jvm是一个非常简单的 Package 器脚本,它仅仅调用kotlinc-因此它们之间显然没有任何有效的区别!
这表明Kotlin/JVM是默认的编译目标,至少在我的系统上是这样的。 (kotlinc-js也调用kotlinc,但只有在设置了$KOTLIN_COMPILER环境变量之后,这会改变kotlinc最终运行的程序。) 也许kotlinc在其他系统上有不同的默认值--或者至少他们希望允许这种可能性。
正在运行:
除了kotlin将Kotlin运行时类添加到类路径之外,运行kotlin的AIUI实际上等效于运行java
当然,您可以在运行java时手动添加它们(例如,在$CLASSPATH-cp参数中);但是您需要知道它们在哪里,或者有某种方法找到它们。 (在我的系统中,它们在…/libexec/lib/中。 唯一重要的是相关的kotlin-stdlib jar,尽管有些代码也需要kotlin-reflect,也许其他代码也需要。 或者,如果您有完整的Kotlin安装,我认为您可以简单地添加kotlin-runner.jar,它会为您拉入其他代码。)
我不认为使用kotlin有任何其他好处。
请注意,如果您构建了一个‘fat’ .jar/.war文件,其中包含Kotlin运行库,那么大多数系统将使用java来运行该文件。

相关问题