我正在尝试使用 Java Scripting API 在 JVM 中评估 Kotlin 代码。
try {
ScriptEngineManager().getEngineByExtension("kts").let {
it.eval("val f: (CommandContext.()->Any?) = {\n${this.args.joinToString(" ")}\n}; return f") as (CommandContext.()->Any?)
}().let { embed.setDescription(it.toString()) }
} catch (ex: Exception) {
embed.setColor(Color.RED)
embed.setDescription(StringWriter().also { ex.printStackTrace(PrintWriter(it)) }.toString())
}
但是...ScriptEngineManager().getEngineByExtension("kts")
返回给我一个空值。我已经添加了META-INF/services
文件:
文件名:javax.script.ScriptEngineFactory
文件内容:org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory
它可以根据 JetBrains 工作:https ://github.com/JetBrains/kotlin/tree/master/libraries/examples/kotlin-jsr223-local-example