3

先月最近更新された Apache Sling の Scala 2.8 Script Engine を使用しようとしています。私は Sling の Scala 2.7 Script Engine と一緒に Scala 2.7 を使用するようになりましたが、うまく機能しました。新しい実装を使用しようとすると、問題が発生します。ScalaScriptEngine の eval 関数を呼び出すと、NullPointerException が原因で「スクリプトの実行中にエラーが発生しました」というメッセージが常に表示されます。他の誰かがスクリプト エンジンの新しいビルドを使用して、同様にこれに遭遇しましたか?

ありがとう!スティーブン

4

1 に答える 1

3

Scala スクリプト エンジンをスタンドアロンで使用できないというバグがあります。詳細とパッチについては、https://issues.apache.org/jira/browse/SLING-1877を参照してください。

また、パッチを適用しても、スクリプト エンジンを使用する場合はクラス パスを設定する必要があることに注意してください。これは、デフォルトの Java クラス パス (つまり、java.class.path) が自動的に使用されていた 2.7.7 からの変更です。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)
}
于 2010-11-17T23:57:33.597 に答える