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

roqulrg3  于 2023-02-13  发布在  Kotlin
关注(0)|答案(5)|浏览(640)

我注意到IntelliJ可以将.kts文件解析为Kotlin文件,代码编辑器会将它们作为自由浮动的Kotlin文件拾取。您还可以像运行带有main方法的Kotlin文件一样在IntelliJ中运行脚本。脚本从上到下执行。
如果我知道一种简单的方法在Java或Kotlin中使用它们,这个表单对于我正在工作的项目来说是完美的。
从Java或Kotlin“运行”这些脚本的惯用方法是什么?

vsmadaxz

vsmadaxz1#

注意Kotlin中的脚本文件支持还处于实验阶段。这是一个未公开的特性,我们还在设计过程中。今天起作用的东西明天可能会改变、破坏或消失。
也就是说,目前有两种方法可以调用脚本,可以使用命令行编译器:

kotlinc -script foo.kts <args>

或者您可以直接从IntelliJ IDEA调用脚本,方法是右键单击编辑器或项目视图中的.kts文件,然后选择“Run ...":

zy1mlcev

zy1mlcev2#

Kts跑步者

我已经发布了一个简单的库,它可以让你运行来自常规Kotlin程序的脚本。
https://github.com/s1monw1/KtsRunner

示例

1.示例类

data class ClassFromScript(val x: String)
  1. .kts文件
import de.swirtz.ktsrunner.objectloader.ClassFromScript

ClassFromScript("I was created in kts")

1.加载类的代码

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加载,然后在常规程序中处理。

ny6fqffe

ny6fqffe3#

从2020年(Kotlin 1.3.70)开始,您可以直接使用

kotlin script.main.kts

请注意,使用文件扩展名.main.kts代替.ktsseems to be important
请注意,对我来说,如果定义了main()函数,似乎不运行该函数,我必须在顶层添加对main()的手动调用。
Kotlin脚本的优点之一是能够在单个文件中声明代码和依赖项(对于@file:DependsOn,请参见here示例)

wnrlj8wa

wnrlj8wa4#

你在https://github.com/holgerbrandl/kscript上找到的2020IES早期的kscript似乎是最方便和支持最好的方式...

xqk2d5yq

xqk2d5yq5#

jgo可以从Maven存储库中获取并运行代码,因此可用于调用https://github.com/scijava/scijava-commonhttps://github.com/scripting-kotlin来执行本地Foo.kt,如下所示:

jgo --repository scijava.public=maven.scijava.org/content/groups/public org.scijava:scijava-common:@ScriptREPL+org.scijava:scripting-kotlin Foo.kt

如果未提供Foo.kt,则会启动KotlinREPL。

相关问题