Java8から新しいJavaScript Engine であるNashornが同梱されています。詳細は「Oracle Blogs 日本語のまとめ: [Java, JavaScript] Oracle Nashorn: A Next-Generation JavaScript Engine for the JVM」が参考になります。
さっそく動かしてみました。次のJavaScriptプログラムをhello.jsという名前で保存します。
var hello = function() { print("Hello Nashorn!"); }; hello();
Java8にはjjsコマンドというJavaScript実行用コマンドがあるので、これで実行できます。
$ jjs hello.js Hello Nashorn!
JavaScriptのプログラムをJavaプログラム内で利用するには次のようにします。簡単ですね。ここでは、js_srcにJavaScriptプログラムを設定してあります。
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Sample { public static String js_src = "function sum(a, b) { return a+b; }"; public static void main(String... args) throws Throwable { ScriptEngineManager engineManager = new ScriptEngineManager(); ScriptEngine engine = engineManager.getEngineByName("nashorn"); engine.eval(js_src); System.out.println(engine.eval("sum(2, 5);")); } }
次のようにコンパイルして実行できます。
$ javac Sample.java $ java Sample 7
Nashornの用途としては、Javaアプリで拡張機能をJavaScriptで記述して使えるようにしておきたい、という感じだと思うのですが、node.jsみたいにサーバサイドで使えるようになると凄いのですが、どうなのでしょう。クライアントサイドで使えるためにはWebブラウザのエンジンとして搭載される必要がありそうですが、そちらの話題はないようなので、Java専用の特別なエンジンという位置づけで利用されることになりそうです。