如何在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程序?

5 Solutions collect form web for “如何在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

  • 为什么我得到@提供注释错误?
  • Kotlin中的静态扩展方法
  • Spring在kotlin中注入通用接口实现列表
  • 如何在现有的Android应用程序中使用Kotlin?
  • Kotlin在Android Studio上的错误<>
  • 当Kotlin函数不采用可空types时,正确的方法是什么?
  • 如何调试Kotlin序列/集合
  • Gradle错误 - 当我在单个Kotlin文件或特定测试函数上运行unit testing时
  • Kotlin访问派生types中的伴随对象成员
  • 无法在Kotlin中“findViewById”。 获取错误“types推断失败”
  • 使用意向操作在Android Studio中创建Kotlin类
  • Kotlin language will be the best programming language for Android.