2010-11-17 3 views
3

Я пытаюсь использовать Scala 2.8 Script Engine от Apache Sling, недавно обновленный в прошлом месяце. Я пришел с помощью Scala 2.7 вместе с Sling Scala 2.7 Script Engine и отлично работал. Я сталкиваюсь с проблемой, когда пытаюсь использовать новую реализацию. При вызове функции eval функции ScalaScriptEngine я всегда получаю «скрипт выполнения ошибки» из-за исключения NullPointerException. Кто-нибудь еще работал с новой сборкой движка скрипта и запускал это?Использование Apache Sling Scala 2.8 Script Engine

Спасибо! Steven

+0

Вы могли бы хотеть подать ошибку здесь: https://issues.apache.org/jira/browse/SLING – michid

+0

Возможно, было бы интересно поместить ссылку на этот проект, чтобы люди, которые не слышали об этом, могли попробовать. –

+0

Apache Sling: http://sling.apache.org/site/index.html Механизм сценариев Scala (который также может использоваться независимо от Sling) находится здесь: http://svn.apache.org/viewvc/ sling/trunk/contrib/scripting/scala/ – michid

ответ

3

Существует ошибка, которая препятствует использованию сценария Scala в автономном режиме. См. https://issues.apache.org/jira/browse/SLING-1877 для получения более подробной информации и исправления.

Также обратите внимание, что при использовании исправления вам все равно необходимо установить путь к классу при использовании механизма сценариев. Это изменение от 2.7.7, где путь по умолчанию java-класса (т. Е. Java.class.path) использовался автоматически. В 2.8 вы должны установить это явно для аргумента '-usejavacp'.

Вот некоторые примеры кода демонстрирует автономное использование сценариев двигателя 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) 
} 
Смежные вопросы