Mit Apache Sling Scala 2.8 Script Engine
-
25-09-2019 - |
Frage
Ich habe versucht, Apache Sling Scala 2.8 Script Engine aktualisiert im letzten Monat zu verwenden. Ich kam aus mit Scala 2.7 zusammen mit Sling Scala 2.7 Script Engine und das hat super funktioniert. Ich laufe in ein Problem, wenn ich versuche, die neue Implementierung zu verwenden. Wenn ScalaScriptEngine der eval-Funktion aufrufen erhalte ich immer ein „Fehler beim Ausführen von Skript“ aufgrund einer Nullpointer. Hat jemand anderes mit dem neuen Build des Script-Engine und führte in dem so gut?
gearbeitetDanke! Steven
Lösung
Es ist ein Fehler, der die Scala Scripting-Engine durch Betrieb Standalone verhindern. Siehe https://issues.apache.org/jira/browse/SLING-1877 für Details und ein Patch.
Beachten Sie auch, dass bei der Installation der Patches Sie noch den Klassenpfad festlegen müssen, wenn das Scripting-Engine. Dies ist eine Änderung gegenüber 2.7.7, wo der Standard-Java-Klassenpfad (d.h. java.class.path) automatisch verwendet wurde. In 2.8 haben Sie '-usejavacp Argument dieses ausdrücklich gründlich das einzustellen.
Hier ist ein Beispielcode der Standalone-Nutzung der Scala Scripting-Engine demonstriert:
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)
}