L'utilisation Scala Apache Sling 2.8 du moteur de script
-
25-09-2019 - |
Question
J'ai essayé d'utiliser Scala Apache Sling 2.8 du moteur de script récemment mis à jour le mois dernier. Je suis venu d'utiliser Scala 2.7 avec moteur de Sling Scala 2.7 Script et a très bien fonctionné. Je rencontre un problème lorsque je tente d'utiliser la nouvelle implémentation. Lorsque vous appelez la fonction eval de ScalaScriptEngine je reçois toujours un « exécution du script d'erreur » en raison d'un NullPointerException. Quelqu'un at-il travaillé d'autre avec la nouvelle version du moteur de script et exécuter dans ce ainsi?
Merci! Steven
La solution
Il y a un bug qui empêche le moteur de script Scala d'être utilisé de manière autonome. Voir https://issues.apache.org/jira/browse/SLING-1877 pour plus de détails et un patch.
Notez également que le correctif appliqué devez toujours définir le chemin de la classe lors de l'utilisation du moteur de script. Ceci est un changement de 2.7.7 où le chemin de classe Java par défaut (à savoir java.class.path) a été utilisé automatiquement. En 2.8, vous devez définir ce l'argument « -usejavacp » explicitement approfondie.
Voici quelques exemples de code montrant l'utilisation autonome du moteur de script 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)
}