我一直在尝试使用上个月最近更新的 Apache Sling 的 Scala 2.8 脚本引擎。我使用 Scala 2.7 和 Sling 的 Scala 2.7 脚本引擎,效果很好。当我尝试使用新的实现时遇到了问题。在调用 ScalaScriptEngine 的 eval 函数时,由于 NullPointerException,我总是收到“执行脚本错误”。有没有其他人使用过新版本的脚本引擎并且也遇到过这个问题?
谢谢!史蒂文
我一直在尝试使用上个月最近更新的 Apache Sling 的 Scala 2.8 脚本引擎。我使用 Scala 2.7 和 Sling 的 Scala 2.7 脚本引擎,效果很好。当我尝试使用新的实现时遇到了问题。在调用 ScalaScriptEngine 的 eval 函数时,由于 NullPointerException,我总是收到“执行脚本错误”。有没有其他人使用过新版本的脚本引擎并且也遇到过这个问题?
谢谢!史蒂文
有一个错误会阻止 Scala 脚本引擎独立使用。有关详细信息和补丁,请参阅https://issues.apache.org/jira/browse/SLING-1877。
另请注意,应用补丁后,您在使用脚本引擎时仍需要设置类路径。这是对 2.7.7 的更改,在 2.7.7 中自动使用了默认的 java 类路径(即 java.class.path)。在 2.8 中,您必须通过 '-usejavacp' 参数显式设置它。
下面是一些示例代码,展示了 Scala 脚本引擎的独立用法:
def testScalaScriptEngine() {
val scriptEngineFactory = new ScalaScriptEngineFactory
val settings = new ScalaSettings()
settings.parse("-usejavacp")
scriptEngineFactory.getSettingsProvider.setScalaSettings(settings)
val scriptEngine = scriptEngineFactory.getScriptEngine
val script = """
package script {
class Demo(args: DemoArgs) {
println("Hello")
}
}
"""
scriptEngine.getContext.setAttribute("scala.script.class", "script.Demo", ScriptContext.ENGINE_SCOPE)
scriptEngine.eval(script)
}