我一直在尝试使用上个月最近更新的Apache Sling的Scala 2.8脚本引擎。我来自使用Scala 2.7和Sling的Scala 2.7脚本引擎,效果很好。当我尝试使用新实现时遇到问题。调用ScalaScriptEngine的eval函数时,由于NullPointerException,我总是收到“执行脚本错误”。有没有其他人使用过脚本引擎的新版本并且也遇到了这个问题?
谢谢! 史蒂芬
答案 0 :(得分:3)
有一个错误会阻止Scala脚本引擎独立使用。有关详细信息和修补程序,请参阅https://issues.apache.org/jira/browse/SLING-1877。
另请注意,应用补丁时,您仍需要在使用脚本引擎时设置类路径。这是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)
}