如何从 Kotlin/Java 中 运行 Kotlin-Script (.kts) 文件?
How can I run Kotlin-Script (.kts) files from within Kotlin/Java?
我注意到 IntelliJ 可以将 .kts
文件解析为 Kotlin,并且代码编辑器将它们作为自由浮动的 Kotlin 文件进行挑选。您还可以 运行 IntelliJ 中的脚本,就像使用 main 方法的 Kotlin 文件一样。脚本从上到下执行。
如果我知道在 Java 或 Kotlin 中使用它们的简单方法,此表格非常适合我正在从事的项目。
"run" 这些来自 Java 或 Kotlin 的脚本的惯用方法是什么?
请注意,Kotlin 中的脚本文件支持仍处于试验阶段。这是一个未记录的功能,我们仍在设计过程中。今天的工作明天可能会改变、中断或消失。
也就是说,目前有两种调用脚本的方法。您可以使用命令行编译器:
kotlinc -script foo.kts <args>
或者您可以直接从 IntelliJ IDEA 调用脚本,方法是 right-clicking 在编辑器中或在 .kts 文件的项目视图中选择 "Run ...":
KtsRunner
我发布了一个简单的库,让您可以 运行 来自常规 Kotlin 程序的脚本。
https://github.com/s1monw1/KtsRunner
例子
例子class
data class ClassFromScript(val x: String)
.kts
文件
import de.swirtz.ktsrunner.objectloader.ClassFromScript
ClassFromScript("I was created in kts")
代码加载 class
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
class 可用于执行 .kts
脚本和 return 其结果。该示例显示了一个脚本,它创建了一个 ClassFromScript
类型的实例,该实例通过 KtsObjectLoader
加载,然后在常规程序中处理。
2020 年初 kscript that you find at https://github.com/holgerbrandl/kscript
似乎是最方便和最受支持的方式......
截至 2020 年 (Kotlin 1.3.70),您可以直接使用
kotlin script.main.kts
请注意,使用文件扩展名 .main.kts
而不是 .kts
。
请注意,对我而言,不是 运行 如果定义了 main()
函数,我必须添加对 [=13 的手动调用=] 在顶层。
Kotlin 脚本的优点之一是能够在单个文件中声明代码和依赖项(使用 @file:DependsOn
,参见示例 )
我注意到 IntelliJ 可以将 .kts
文件解析为 Kotlin,并且代码编辑器将它们作为自由浮动的 Kotlin 文件进行挑选。您还可以 运行 IntelliJ 中的脚本,就像使用 main 方法的 Kotlin 文件一样。脚本从上到下执行。
如果我知道在 Java 或 Kotlin 中使用它们的简单方法,此表格非常适合我正在从事的项目。
"run" 这些来自 Java 或 Kotlin 的脚本的惯用方法是什么?
请注意,Kotlin 中的脚本文件支持仍处于试验阶段。这是一个未记录的功能,我们仍在设计过程中。今天的工作明天可能会改变、中断或消失。
也就是说,目前有两种调用脚本的方法。您可以使用命令行编译器:
kotlinc -script foo.kts <args>
或者您可以直接从 IntelliJ IDEA 调用脚本,方法是 right-clicking 在编辑器中或在 .kts 文件的项目视图中选择 "Run ...":
KtsRunner
我发布了一个简单的库,让您可以 运行 来自常规 Kotlin 程序的脚本。
https://github.com/s1monw1/KtsRunner
例子
例子class
data class ClassFromScript(val x: String)
.kts
文件import de.swirtz.ktsrunner.objectloader.ClassFromScript ClassFromScript("I was created in kts")
代码加载 class
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
class 可用于执行 .kts
脚本和 return 其结果。该示例显示了一个脚本,它创建了一个 ClassFromScript
类型的实例,该实例通过 KtsObjectLoader
加载,然后在常规程序中处理。
2020 年初 kscript that you find at https://github.com/holgerbrandl/kscript 似乎是最方便和最受支持的方式......
截至 2020 年 (Kotlin 1.3.70),您可以直接使用
kotlin script.main.kts
请注意,使用文件扩展名 .main.kts
而不是 .kts
请注意,对我而言,不是 运行 如果定义了 main()
函数,我必须添加对 [=13 的手动调用=] 在顶层。
Kotlin 脚本的优点之一是能够在单个文件中声明代码和依赖项(使用 @file:DependsOn
,参见示例