gpt4 book ai didi

kotlin - 使用 javax.script.ScriptEngineManager 在 JVM 中评估 Kotlin 的问题

转载 作者:行者123 更新时间:2023-12-02 12:47:28 27 4
gpt4 key购买 nike

我正在尝试使用 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

最佳答案

添加跟进,因为我遇到了同样的错误,但在获取 1.3.31 的依赖项并添加脚本引擎初始化文件后,我能够让它工作。

我的工作依赖项:

plugins {
base
kotlin("jvm") version "1.3.31"
}
...

dependencies {
compile(kotlin("stdlib"))
compile(kotlin("reflect"))
compile(kotlin("script-runtime"))
compile(kotlin("compiler-embeddable"))
compile(kotlin("script-util"))
runtime(kotlin("scripting-compiler-embeddable"))

testImplementation("org.junit.jupiter:junit-jupiter-api:5.2.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.2.0")

}

您肯定需要添加文件 src/main/resources/META-INF/services/javax.script.ScriptEngineFactory。

这是示例文件:
https://github.com/JetBrains/kotlin/blob/master/libraries/examples/kotlin-jsr223-local-example/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory

这段代码应该表明您已经注册了 kotlin 扩展。
ScriptEngineManager().engineFactories.forEach { println(it.extensions)
...
[kts]
[js]

关于kotlin - 使用 javax.script.ScriptEngineManager 在 JVM 中评估 Kotlin 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com