TODESKING
技術ブログ

ScalaでNashornを使うときは、ScriptEngineManagerのコンストラクタにnullを渡す必要がある

1
2
import javax.script.ScriptEngineManager
val engineManager = new ScriptEngineManager(null);

ScriptEngineManagerの引数には目的のScriptEngineをロード可能なClassLoaderを指定する必要があるんですが、 引数省略時にはThread.currentThread.contextClassLoaderが使用されるようになっており、sbt runで起動した場合に謎のクラスローダーが使われることになってJDKのextensionであるNashornのエンジンがロード不能。なので明示的にnullを渡す必要があります。

これ、sbt consoleだと引数省略でもうまくいったりするので闇が深い。sbtのクラスローダには気をつけましょう。

ref: http://stackoverflow.com/questions/23567500/how-to-use-scriptengine-in-scalatest

Comments