如何在Kotlin / Java中运行Kotlin-Script(.kts)文件?

时间:2016-01-24 09:18:57

标签: java kotlin

我注意到IntelliJ可以将.kts文件解析为Kotlin,代码编辑器将它们作为自由浮动的Kotlin文件进行选择。您也可以像使用main方法的Kotlin文件一样在IntelliJ中运行脚本。该脚本从上到下执行。

这个表单对我正在处理的项目来说是完美的,只要我知道在Java或Kotlin中使用它们的简单方法。

从Java或Kotlin“运行”这些脚本的惯用方法是什么?

4 个答案:

答案 0 :(得分:26)

请注意,Kotlin中的脚本文件支持仍然是实验性的。这是一个未记载的功能,我们仍然在设计过程中。今天工作的人明天可能会改变,破裂或消失。

也就是说,目前有两种方法可以调用脚本。您可以使用命令行编译器:

kotlinc -script foo.kts <args>

或者您可以直接从IntelliJ IDEA调用脚本,方法是右键单击编辑器或.kts文件的项目视图,然后选择&#34;运行...&#34;:

Run .kts from IntelliJ IDEA

答案 1 :(得分:7)

KtsRunner

我已经发布了一个简单的库,让您可以从常规的Kotlin程序中运行脚本。

https://github.com/s1monw1/KtsRunner

实施例

  1. 示例类

    data class ClassFromScript(val x: String)
    
  2. .kts文件

    import de.swirtz.ktsrunner.objectloader.ClassFromScript
    
    ClassFromScript("I was created in kts")
    
  3. 加载课程的代码

    val scriptReader =  Files.newBufferedReader(Paths.get("path/classDeclaration.kts"))
    val loadedObj: ClassFromScript = KtsObjectLoader().load<ClassFromScript>(scriptReader)
    println(loadedObj.x) // >> I was created in kts
    
  4. 如图所示,KtsObjectLoader类可用于执行.kts脚本并返回其结果。该示例显示了一个脚本,该脚本创建了ClassFromScript类型的实例,该实例通过KtsObjectLoader加载,然后在常规程序中处理。

答案 2 :(得分:1)

您在kscript找到的

2020年初的https://github.com/holgerbrandl/kscript 似乎是最方便,最受支持的方式...

答案 3 :(得分:1)

截至 2021 年(Kotlin 1.4.31),您可以直接使用简单的

ActiveRecord::Relation#uniq

注意使用文件扩展名 kotlin script.main.kts 而不是 .main.kts seems to be important

Kotlin 脚本的优点之一是能够在单个文件中声明代码和依赖项(使用 .kts,参见示例 here