intellij-idea - 尝试在 IntelliJ IDEA 中运行 Kotlin 脚本

标签 intellij-idea kotlin

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

名为 的文件中的示例代码你好kt :

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

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

enter image description here

事实上,在尝试运行脚本时,我得到了以下堆栈跟踪:
"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

错误:未找到源文件或目录:Hello.kt
Process finished with exit code 1

所以我的问题是:尝试在 IntelliJ 的独立 Kotlin 脚本中创建和运行 Kotlin 代码时,我缺少什么?

最佳答案

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

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

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

println(hello())

您看到的堆栈跟踪是 a bug in Kotlin .

关于intellij-idea - 尝试在 IntelliJ IDEA 中运行 Kotlin 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150374/

相关文章:

git - 尝试签署提交 (GPG) 时,IntelliJ 无法提交更改

java - 在调试测试时使用 DatabaseManager 连接到内存中的 Hsql(超音速)数据库

java - 如何知道在使用 Intellij 进入 catch block 之前执行的最后一行是什么?

java - 为什么 IntelliJ IDEA 给出异常建议?

Java 互操作 : Apply @JvmName to getters of properties in interface or abstract class

android - 无法将从相机点击的图像上传到服务器

具有动态表名的 Android Room Fetch 数据

java - intellij tomcat 服务器即使按照设置说明提供 404

kotlin - 如何在 Kotlin 中生成 BigDecimals 列表而无需循环?

kotlin - 来自插件的 gradle 多项目任务配置 - 如何配置每个项目?