Pergunta

Eu tenho tentado usar o Scala 2.8 Script Engine do Apache Sling, atualizado recentemente no mês passado. Eu vim do uso do Scala 2.7, juntamente com o Scala 2.7 Script Motor do Sling e isso funcionou muito bem. Encontro um problema quando tento usar a nova implementação. Ao chamar a função de avaliação do ScalascriptEngine, sempre recebo um "erro de execução de script" devido a uma nullpointerException. Alguém mais trabalhou com a nova construção do mecanismo de script e também se depara com isso?

Obrigado! Steven

Foi útil?

Solução

Há um bug que impede que o mecanismo de script scala seja usado independente. Ver https://issues.apache.org/jira/browse/sling-1877 Para detalhes e um patch.

Observe também que, com o patch aplicado, você ainda precisa definir o caminho da classe ao usar o mecanismo de script. Esta é uma alteração de 2.7.7 em que o caminho da classe Java padrão (ou seja, java.class.path) foi usado automaticamente. Em 2.8, você deve definir isso explicitamente o argumento '-UseJavacp'.

Aqui está algum código de amostra que demonstra o uso independente do mecanismo de script de 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top