Domanda

Ho cercato di usare Scala 2.8 motore di script di Apache Sling recentemente aggiornato il mese scorso. Sono venuto da utilizzare Scala 2,7 insieme a Scala 2.7 Script Engine Sling e che ha funzionato grande. Mi imbatto in un problema quando si tenta di utilizzare la nuova implementazione. Quando si chiama la funzione eval di ScalaScriptEngine ricevo sempre un "Errore durante l'esecuzione script" a causa di una NullPointerException. Qualcun altro ha lavorato con la nuova build del motore di script e correre in questo pure?

Grazie! Steven

È stato utile?

Soluzione

C'è un bug che impedisce al motore di scripting Scala da essere autonomo usato. Vedere https://issues.apache.org/jira/browse/SLING-1877 per i dettagli e una patch.

Si noti inoltre, che con la patch applicata è ancora necessario impostare il percorso di classe quando si utilizza il motore di scripting. Questo è un cambiamento da 2.7.7 dove il percorso predefinito di classe java (cioè java.class.path) è stato utilizzato automaticamente. In 2.8 è necessario impostare esplicitamente approfondito l'argomento '-usejavacp'.

Ecco alcuni esempi di codice che dimostra l'utilizzo autonomo del motore di 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)
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top