باستخدام محرك Scala 2.8 Script من Apache Sling
-
25-09-2019 - |
سؤال
لقد كنت أحاول استخدام محرك Scala 2.8 Script من Apache Sling الذي تم تحديثه مؤخرًا الشهر الماضي. لقد جئت من استخدام Scala 2.7 جنبا إلى جنب مع محرك Sling's Scala 2.7 Script والتي عملت بشكل رائع. أواجه مشكلة عندما أحاول استخدام التنفيذ الجديد. عند استدعاء وظيفة تقييم ScalaScriptengine ، أتلقى دائمًا "خطأ في تنفيذ البرنامج النصي" بسبب nullpointerxception. هل عمل أي شخص آخر مع البناء الجديد لمحرك البرنامج النصي ويواجه هذا أيضًا؟
شكرًا! ستيفن
المحلول
هناك خطأ يمنع استخدام محرك البرمجة النصية Scala من مستقل. يرى https://issues.apache.org/jira/browse/sling-1877 لمزيد من التفاصيل وتصحيح.
لاحظ أيضًا أنه مع تطبيق التصحيح ، لا تزال بحاجة إلى تعيين مسار الفصل عند استخدام محرك البرمجة النصية. هذا تغيير من 2.7.7 حيث تم استخدام مسار فئة Java الافتراضي (أي java.class.path) تلقائيًا. في 2.8 ، يجب عليك تعيين وسيطة "-usejavacp" الشاملة بشكل صريح.
فيما يلي بعض رمز العينة الذي يوضح الاستخدام المستقل لمحرك Scala Scripting:
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)
}