我注意到IntelliJ可以将.kts
文件解析为Kotlin,代码编辑器将它们作为自由浮动的Kotlin文件进行选择。您也可以像使用main方法的Kotlin文件一样在IntelliJ中运行脚本。该脚本从上到下执行。
这个表单对我正在处理的项目来说是完美的,只要我知道在Java或Kotlin中使用它们的简单方法。
从Java或Kotlin“运行”这些脚本的惯用方法是什么?
答案 0 :(得分:26)
请注意,Kotlin中的脚本文件支持仍然是实验性的。这是一个未记载的功能,我们仍然在设计过程中。今天工作的人明天可能会改变,破裂或消失。
也就是说,目前有两种方法可以调用脚本。您可以使用命令行编译器:
kotlinc -script foo.kts <args>
或者您可以直接从IntelliJ IDEA调用脚本,方法是右键单击编辑器或.kts文件的项目视图,然后选择&#34;运行...&#34;:
答案 1 :(得分:7)
我已经发布了一个简单的库,让您可以从常规的Kotlin程序中运行脚本。
https://github.com/s1monw1/KtsRunner
示例类
data class ClassFromScript(val x: String)
.kts
文件
import de.swirtz.ktsrunner.objectloader.ClassFromScript
ClassFromScript("I was created in kts")
加载课程的代码
val scriptReader = Files.newBufferedReader(Paths.get("path/classDeclaration.kts"))
val loadedObj: ClassFromScript = KtsObjectLoader().load<ClassFromScript>(scriptReader)
println(loadedObj.x) // >> I was created in kts
如图所示,KtsObjectLoader
类可用于执行.kts
脚本并返回其结果。该示例显示了一个脚本,该脚本创建了ClassFromScript
类型的实例,该实例通过KtsObjectLoader
加载,然后在常规程序中处理。
答案 2 :(得分:1)
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)