Jetbrains提供了一些文档,但我找不到如何运行Kotlin的编译类文件.
hello.kt:
fun main(args : Array<String>) {
println("Hello, world!")
}
Run Code Online (Sandbox Code Playgroud)
编译:
$ 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
Run Code Online (Sandbox Code Playgroud)
如何运行Kotlin程序?
Jay*_*ard 44
目前(K14从M14开始,包括高达1.0 beta),要运行Kotlin类,您实际上正在运行一个特殊类,它在文件级别创建,用于保存您main()和其他顶级函数(在类或接口之外) .所以如果你的代码是:
// file App.kt
package com.my.stuff
public fun main(args: Array<String>) {
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过运行com.my.stuff.AppKt该类来执行该程序.此名称是从您的文件名派生而来的Kt(附加了以前的版本,KT但是后来的beta 版本是1.0 Kt).您可以通过添加此文件定位注释来更改文件中此类的名称:
@file:JvmName("MyApp")
Run Code Online (Sandbox Code Playgroud)
或者您也可以main()使用伴随对象将其放入类中,并static使用JvmStatic注释进行创建.因此,您的班级名称是您选择的名称:
// file App.kt
package com.my.stuff
public class MyApp {
companion object {
@JvmStatic public fun main(args: Array<String>) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,对于这些方法中的任何一个,您只需运行该类 com.my.stuff.MyApp
您需要应用程序JAR和任何依赖项.对于在Maven/Gradle之外的Kotlin特定JAR,您需要一个包含以下内容的Kotlin分布:
kotlin-runtime.jar (合并运行时和stdlib)kotlin-reflect.jar 只有使用Kotlin反射kotlin-test.jar 对于使用Kotlin断言类的单元测试在Maven/Gradle内,目前还有一个单独的 kotlin-stdlib.jar
如果在Intellij中(如果它是您的IDE),您可以右键单击该main()函数并选择Run,它将为您创建运行时配置并显示将使用的完全限定类名.如果您不确定生成的类的名称,则可以始终使用它.
您还可以使用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 Code Online (Sandbox Code Playgroud)
然后从命令行使用:
// run the program
gradle run
// debug the program
gradle run --debug-jvm
// create a distribution (distTar, distZip, installDist, ...)
gradle distTar
Run Code Online (Sandbox Code Playgroud)
如果您有一个可运行的JAR,并且假设KOTLIN_LIB指向Kotlin运行时库文件所在的目录:
java -cp $KOTLIN_LIB/kotlin-runtime.jar:MyApp.jar com.my.stuff.AppKt
Run Code Online (Sandbox Code Playgroud)
请参阅上面有关您可能需要的其他JAR文件的说明.如果您有一个可运行的JAR(将清单指向com.my.stuff.AppKt主类),则会略有不同:
java -cp $KOTLIN_LIB/kotlin-runtime.jar -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)
如果您通过Homebrew或其他软件包管理器安装Kotlin工具.(在Mac OS X上brew update ; brew install kotlin)然后运行起来非常简单:
kotlin -cp MyApp.jar com.my.stuff.AppKt
Run Code Online (Sandbox Code Playgroud)
此命令将运行时添加到提供的类路径,然后运行该类.您可能需要添加其他Kotlin库,如上面的"从Java运行"一节中所述.
这并不常见,因为大多数人都使用其他构建工具,但Kotlin编译器可以创建一个可运行的Jar,它可以为您解决这个问题(请参阅http://kotlinlang.org/docs/tutorials/command-line.html).运行时和你的代码在一起.虽然使用Maven和Gradle等工具或IDE构建时并不常见.然后使用普通的Java运行:
java -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)
小智 5
我们遇到了相同的程序并在此处发布了我们的解决方案: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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10501 次 |
| 最近记录: |