如何在Kotlin中运行编译后的类文件?
Jetbrains提供了一些文档,但我找不到如何运行Kotlin的编译类文件。
hello.kt:
fun main(args : Array) { println("Hello, world!") }
编译:
$ kotlinc -out dist -src hello.kt $ ls dist namespace.class $ java dist/namespace Exception in thread "main" java.lang.NoClassDefFoundError: dist/namespace (wrong name: namespace) $ java -jar /usr/local/kotlin/lib/kotlin-runtime.jar Failed to load Main-Class manifest attribute from /usr/local/kotlin/lib/kotlin-runtime.jar
如何运行Kotlin程序?
我们遇到了同样的程序,并在这里写下了我们的解决方案: http : //blog.ocheyedan.net/blog/2012/02/19/running-kotlin-code/
基本上你只需要用-cp和’namespace’的主类来调用java。 从你的问题来看,java调用看起来像这样:
java -cp /usr/local/kotlin/lib/kotlin-runtime.jar:dist/namespace.class namespace
知道你的主要类的名字
目前(Kotlin自M14包括1.0 beta版本),运行一个Kotlin类,实际上是运行一个特殊的类,它是在文件级创建的,它保存main()
和其他顶级函数(在类之外或界面)。 所以如果你的代码是:
// file App.kt package com.my.stuff public fun main(args: Array) { ... }
然后你可以通过运行com.my.stuff.AppKt
类来执行程序。 这个名字来源于你的文件名附加Kt
(以前的版本附加KT
但从后来的测试版和1.0是Kt
)。 您可以通过添加此文件目标注释来更改文件中此类的名称:
@file:JvmName("MyApp")
或者你也可以把你的main()
放入一个伴随对象的类中,并使用JvmStatic
注解来使其成为static
的。 因此,您的class级名称是您选择的class级名称:
// file App.kt package com.my.stuff public class MyApp { companion object { @JvmStatic public fun main(args: Array) { ... } } }
现在对于这些方法中的任何一个,只需运行com.my.stuff.MyApp
类
我还需要其他的JAR文件吗?
您需要您的应用程序JAR和任何依赖项。 对于在Maven / Gradle之外的Kotlin特定的JAR,您需要一个Kotlin发行版,其中包含:
-
kotlin-runtime.jar
(联合运行时和stdlib) -
kotlin-reflect.jar
只有在使用Kotlinreflection - 用于使用Kotlin断言类的unit testing的
kotlin-test.jar
在Maven / Gradle中目前还有一个单独的kotlin-stdlib.jar
从Intellij运行
如果在Intellij中(如果它是您的IDE),您可以右键单击main()
函数并选择Run,它将为您创建一个运行时配置,并显示将使用的完全限定的类名称。 如果您不确定生成的类的名称,可以随时使用它。
从Gradle运行
您也可以使用Gradle Application插件从Gradle运行进程,或者创建一个可运行的系统,其中包含JAR及其所有依赖项的zip / tgz以及启动脚本。 使用上面的示例类,您可以将其添加到您的build.gradle
:
apply plugin: 'application' mainClassName = 'com.my.stuff.AppKt' // optional: add one string per argument you want as the default JVM args applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1g"]
然后从命令行使用:
// run the program gradle run // debug the program gradle run --debug-jvm // create a distribution (distTar, distZip, installDist, ...) gradle distTar
直接从Java命令行运行
如果您有可运行的JAR,并且假设KOTLIN_LIB
指向Kotlin运行时库文件所在的目录:
java -cp $KOTLIN_LIB/kotlin-runtime.jar:MyApp.jar com.my.stuff.AppKt
请参阅上面关于您可能需要的其他JAR文件的注释。 如果您有一个可运行的JAR(清单指向com.my.stuff.AppKt
作为主类),则com.my.stuff.AppKt
:
java -cp $KOTLIN_LIB/kotlin-runtime.jar -jar MyApp.jar
使用Kotlin命令行工具运行
如果您通过Homebrew或其他软件包管理器安装Kotlin工具。 (在Mac OS X上brew update ; brew install kotlin
)然后运行非常简单:
kotlin -cp MyApp.jar com.my.stuff.AppKt
该命令将运行时添加到提供的类路径中,然后运行该类。 您可能需要添加其他Kotlin库,如上面的“从Java运行”部分所述。
使用Kotlin编译器创建可运行的JAR
这是不常见的,因为大多数人使用其他构建工具,但是Kotlin编译器可以创建一个可运行的Jar,它可以为你解决这个问题(请参阅http://kotlinlang.org/docs/tutorials/command-line.html )运行时和你的代码一起。 尽管在使用诸如Maven和Gradle等工具或IDE构建时,这并不常见。 然后使用普通的Java运行:
java -jar MyApp.jar
更新:在较新版本的Kotlin IDE插件中,可以使用“编辑器”popup菜单中的上下文运行操作。
如果您在IDE中,右键单击编辑器并选择“运行命名空间”,否则,编译并运行* .namespace类作为普通的Java类。
我运行jar这样使用kotlin
java -cp target/idea_test-1.0-SNAPSHOT.jar:lib/kotlin-runtime.jar testing.first seyfer
你好seyfer种子!
文档给出了一个很好和简洁的答案:
kotlinc hello.kt -include-runtime -d hello.jar java -jar hello.jar
koclinc
位于IntelliJ IDEA目录下的IntelliJ\plugins\Kotlin\kotlinc\bin
目录下。
如果您正在运行Windows,请使用kotlinc-jvm.bat