使用Apache Sling的Scala 2.8脚本引擎

时间:2010-11-17 00:25:26

标签: apache scripting scala scriptengine

我一直在尝试使用上个月最近更新的Apache Sling的Scala 2.8脚本引擎。我来自使用Scala 2.7和Sling的Scala 2.7脚本引擎,效果很好。当我尝试使用新实现时遇到问题。调用ScalaScriptEngine的eval函数时,由于NullPointerException,我总是收到“执行脚本错误”。有没有其他人使用过脚本引擎的新版本并且也遇到了这个问题?

谢谢! 史蒂芬

1 个答案:

答案 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)
}