尝试在IntelliJ IDEA中运行Kotlin脚本

我正在通过做Kotlin Koans int IntelliJ EduKotlin插件( https://plugins.jetbrains.com/plugin/8186 )来学习Kotlin。 在执行任务并运行它们的情况下,这个插件正在运行,我无法创建新的Kotlin脚本并在没有此插件的情况下运行它。

示例代码在一个名为Hello.kt的文件中:

fun hello() : String { return "ok" } 

然后,我创建了从“Kotlin脚本”派生的新运行配置,将“工作目录”设置为ProjectName / src文件夹(或ProjectName文件夹,结果相同),然后IDE向我显示“无法find脚本文件:Hello.kt”下面的屏幕:

在这里输入图像说明

事实上,在试图运行脚本时,我得到了以下堆栈跟踪:

 "C:\Program Files\Java\jdk1.8.0_74\bin\java" -Dfile.encoding=windows-1250 -classpath C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-reflect.jar;C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-runtime.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler -script Hello.kt exception: java.lang.RuntimeException: Failed to evaluate script: kotlin.KotlinNullPointerException at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileScript(KotlinToJVMBytecodeCompiler.kt:263) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileAndExecuteScript(KotlinToJVMBytecodeCompiler.kt:212) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:181) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:49) at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:181) at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:138) at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:57) at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:248) at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:238) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler$Companion.main(K2JVMCompiler.kt:248) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.main(K2JVMCompiler.kt) Caused by: kotlin.KotlinNullPointerException at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileScript(KotlinToJVMBytecodeCompiler.kt:475) ... 10 more Process finished with exit code 2 

还有,hello方法被标记为从未使用。 但是,当我将.kt的文件扩展名更改为.ktscript时,则将此方法标记为已使用,运行代码的输出如下所示:

 "C:\Program Files\Java\jdk1.8.0_74\bin\java" -Dfile.encoding=windows-1250 -classpath C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-reflect.jar;C:\Users\myUser\.IdeaIC2016\config\plugins\Kotlin\kotlinc\lib\kotlin-runtime.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler -script Hello.kt 

错误:未find源文件或目录:Hello.kt

 Process finished with exit code 1 

所以我的问题是:当在IntelliJ的独立Kotlin脚本中创建和运行Kotlin代码时,我错过了什么?

独立的Kotlin脚本文件需要扩展名为.kts。 如果您重命名文件,还需要确保您的运行配置已更新,以引用文件的新名称。

另外,如果您创建的任何文件(常规Kotlin文件或.kts文件)只包含一个函数,运行该脚本将不会产生任何输出,因为该函数将不会被调用。 要查看一些输出,您需要在脚本中调用该函数:

 fun hello(): String { return "ok" } println(hello()) 

你看到的堆栈跟踪是Kotlin的一个bug 。