【发布时间】:2019-10-16 12:02:22
【问题描述】:
基于Dynamically evaluating templated Strings in Kotlin,我已尝试运行以字符串形式存储的Kotlin 脚本,以用于特殊和稀有用途。我的 Android Studio 已更新 (3.4.1)。我的电脑运行Windows。
脚本测试存储在here。
我在libs 文件夹中添加了JS223.Jar 文件,作为库添加并在gradle(应用程序)中添加了依赖项。
源码是
import javax.script.*
val engine = ScriptEngineManager().getEngineByExtension("kts")!!
engine.eval("val x = 3")
val res = engine.eval("x + 2")
基于实际使用,我从 JetBrain/Kotlin 中的GitHub 复制了setIdeaIoUseFallback() 代码,没有依赖
但是,无论有没有 setIdeaIoUseFallback() 先前的调用,上面的代码都会在 ScriptEngineManager() 调用中给出一个疯狂的运行时错误
java.lang.NoClassDefFoundError: Failed resolution of: Lsun/misc/Service
Javax.script.ScriptEngineManager.initEngines(ScriptEngineManager.java:90)
javax.script.ScriptEngineManager.access$0(ScriptEngineManager.java:86)
javax.script.ScriptEngineManager$1.run(ScriptEngineManager.java:80)
java.security.AccessController.doPrivileged(AccessController.java:41)
javax.script.ScriptEngineManager.init(ScriptEngineManager.java:78)
javax.script.ScriptEngineManager.<init>(ScriptEngineManager.java:51)
br.com.greatsolutions.paulo.kotlinfirst.MainActivity.onCreate(MainActivity.kt:65)
【问题讨论】: