2010-11-17 4 views
3

J'ai essayé d'utiliser le moteur de script Scala 2.8 d'Apache Sling récemment mis à jour le mois dernier. Je suis venu d'utiliser Scala 2.7 avec Scala 2.7 Script Engine de Sling et cela a bien fonctionné. Je rencontre un problème lorsque j'essaie d'utiliser la nouvelle implémentation. Lorsque j'appelle la fonction eval de ScalaScriptEngine, je reçois toujours un "Script d'exécution d'erreur" en raison d'une exception NullPointerException. Quelqu'un d'autre a-t-il travaillé avec la nouvelle version du moteur de script et y a-t-il également participé?Utilisation du moteur de script Scala 2.8 d'Apache Sling

Merci! Steven

+0

Vous pouvez déposer un bug ici: https://issues.apache.org/jira/browse/SLING – michid

+0

Il pourrait être intéressant de mettre un lien vers ce projet, donc les gens qui n'en ont pas entendu parler pourraient l'essayer. –

+0

Apache Sling: http://sling.apache.org/site/index.html Le moteur de script Scala (qui peut également être utilisé indépendamment de Sling) est ici: http://svn.apache.org/viewvc/ fronde/trunk/contrib/scripting/scala/ – michid

Répondre

3

Un bogue 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 correctif.

Notez également qu'avec le correctif appliqué, vous devez toujours définir le chemin d'accès aux classes lors de l'utilisation du moteur de script. Ceci est une modification de la version 2.7.7 où le chemin de la classe java par défaut (c'est-à-dire java.class.path) a été utilisé automatiquement. Dans 2.8, vous devez définir explicitement l'argument '-usejavacp'.

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) 
} 
Questions connexes