Scripting for the Java™ Platform は
JSR 223
で標準化されたスクリプティング API です。文字列や外部ファイルに記述されている
スクリプトを Java 上で実行することができます。
実行環境で使用できるスクリプトは以下のコードで確認することが出来ます。
Java
// 実行環境でどのようなエンジンが使用できるか確認
ScriptEngineManager manager = new ScriptEngineManager();
for(ScriptEngineFactory f: manager.getEngineFactories()){
System.out.printf(
"[%s/%s] %s/%s%n name=%s%n ext=%s%n mime=%s%n",
f.getEngineName(), f.getEngineVersion(),
f.getLanguageName(), f.getLanguageVersion(),
f.getNames(), f.getExtensions(), f.getMimeTypes());
}
Java SE 6
[Mozilla Rhino/1.6 release 2] ECMAScript/1.6
name=[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]
ext=[js]
mime=[application/javascript, application/ecmascript, text/javascript, text/ecmascript]
Java SE 6 では Rhino と呼ばれる JavaScript (ECMAScript)
エンジンが標準バンドルされています。
基本的な使い方は
ScriptEngineManager
からスクリプトの言語名や拡張子、MIME-Type などを指定して
ScriptEngine
を取得し、eval() メソッドで実行を行います。
Java
private static final ScriptEngineManager manager = new ScriptEngineManager();
// ...
ScriptEngine engine = manager.getEngineByName("JavaScript");
try{
engine.eval("println('hello, world');"); // 標準出力へ
} catch(ScriptException ex){
ex.printStackTrace();
}
同一の ScriptEngine に対して eval() を複数回実行することが出来
ます。この場合、以前の呼び出しで宣言した変数や関数などが次回以降の呼び出しに
引き継がれます。
eval() はスクリプト内の最後のステップの評価結果を返します。このため
スクリプトから Java にオブジェクトを返すには return ではなく値そのものや
それを導出する式、関数などで記述します。
API リファレンス
も参照。
Rhino を含めてさまざまなスクリプト言語の開発が
java.net
で行われており、Script API で利用することができます。
- 利用するスクリプト言語のライブラリをダウンロードします。
-
java.net
から jsr223-engines.zip をダウンロードします。この中にプロジェクトで開発されている
スクリプト言語の JSR 223 エンジンが含まれています。
- 必要な言語のエンジン (xxx-engine.jar) を取り出してスクリプト言語の
ライブラリと一緒にクラスパスへ追加し、Script API を使用するアプリケーションを
起動します。
java.net 以外で開発されているスクリプト言語でも拡張機能機構
を使用して Scripting API に追加が可能です。