Usando o Scala 2.8 Script do Apache Sling 2.8
-
25-09-2019 - |
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
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)
}