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
请注意,使用文件扩展名.main.kts代替.ktsseems to be important。 请注意,对我来说,如果定义了main()函数,似乎不运行该函数,我必须在顶层添加对main()的手动调用。 Kotlin脚本的优点之一是能够在单个文件中声明代码和依赖项(对于@file:DependsOn,请参见here示例)
5条答案
按热度按时间vsmadaxz1#
注意Kotlin中的脚本文件支持还处于实验阶段。这是一个未公开的特性,我们还在设计过程中。今天起作用的东西明天可能会改变、破坏或消失。
也就是说,目前有两种方法可以调用脚本,可以使用命令行编译器:
或者您可以直接从IntelliJ IDEA调用脚本,方法是右键单击编辑器或项目视图中的.kts文件,然后选择“Run ...":
zy1mlcev2#
Kts跑步者
我已经发布了一个简单的库,它可以让你运行来自常规Kotlin程序的脚本。
https://github.com/s1monw1/KtsRunner
示例
1.示例类
.kts
文件1.加载类的代码
如图所示,
KtsObjectLoader
类可用于执行.kts
脚本并返回其结果。该示例显示了一个创建ClassFromScript
类型示例的脚本,该示例通过KtsObjectLoader
加载,然后在常规程序中处理。ny6fqffe3#
从2020年(Kotlin 1.3.70)开始,您可以直接使用
请注意,使用文件扩展名
.main.kts
代替.kts
seems to be important。请注意,对我来说,如果定义了
main()
函数,似乎不运行该函数,我必须在顶层添加对main()
的手动调用。Kotlin脚本的优点之一是能够在单个文件中声明代码和依赖项(对于
@file:DependsOn
,请参见here示例)wnrlj8wa4#
你在https://github.com/holgerbrandl/kscript上找到的2020IES早期的kscript似乎是最方便和支持最好的方式...
xqk2d5yq5#
jgo可以从Maven存储库中获取并运行代码,因此可用于调用https://github.com/scijava/scijava-common和https://github.com/scripting-kotlin来执行本地
Foo.kt
,如下所示:如果未提供
Foo.kt
,则会启动KotlinREPL。