我刚刚安装了Kotlin版本1.7.0,bin文件夹中有以下可运行文件。
Kotlin
1.7.0
kotlinc
kotlin-jvm
kotlin
快速检查后发现,kotlinc和kotlin-jvm是用来将代码编译成字节码的,就像Java中的javac一样。为什么kotlin编译有两个命令,有什么明显的区别吗?而且,我应该使用java命令来运行字节码还是使用kotlin命令来运行字节码。
javac
java
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来运行该文件。
-help
kotlinc-jvm
kotlinc-js
$KOTLIN_COMPILER
$CLASSPATH
-cp
…/libexec/lib/
kotlin-stdlib
kotlin-reflect
kotlin-runner.jar
1条答案
按热度按时间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
来运行该文件。