3

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

谢谢!史蒂文

4

1 回答 1

3

有一个错误会阻止 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)
}
于 2010-11-17T23:57:33.597 回答