Pregunta

He estado tratando de utilizar Scala 2.8 del motor de guiones de Apache Sling actualizado recientemente el mes pasado. Vine de usar Scala 2.7 junto con Scala 2.7 del motor de guiones de honda y que funcionó muy bien. Me encuentro con un problema cuando trato de usar la nueva aplicación. Cuando se llama a la función eval de ScalaScriptEngine siempre recibo un "Error al ejecutar secuencia de comandos" debido a una NullPointerException. Alguien más ha trabajado con la nueva construcción del motor de secuencia de comandos y ejecutar en esto también?

Gracias! Steven

¿Fue útil?

Solución

Hay un error que impide que el motor de secuencias de comandos Scala de ser independiente usado. Ver https://issues.apache.org/jira/browse/SLING-1877 para más detalles y un parche.

Tenga en cuenta también, que con el parche aplicado todavía necesita establecer la ruta de clase cuando se utiliza el motor de scripting. Este es un cambio de 2.7.7 en el que se utiliza automáticamente la ruta de clase java por defecto (es decir java.class.path). En 2.8 se tiene que establecer explícitamente a fondo el argumento '-usejavacp'.

Aquí hay un código de ejemplo que muestra el uso independiente del motor de scripting 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)
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top