Tag Archives: javascript

Java Scripting in JDK6

对动态语言的爱啊,少年啊,前进~~

无聊的开场,简单的说,就是Java Scripting其实很容易,比你想象的要容易的多,特别是在JDK6的时候。

JavaScript的例子

  ScriptEngineManager mgr = new ScriptEngineManager();
  ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
  try {
    jsEngine.eval("print('Hello, world!')");
  } catch (ScriptException ex) {
      ex.printStackTrace();
  }

无需过多解释,只要用了JDK6的环境以上代码就可以运行,默认使用Mozilla Rhino (1.6 release 2)脚本引擎,支持JavaScript 1.6

Ruby的例子

Ruby的例子要麻烦一点,因为要手工添加支持。但是其实也非常简单,只要把JRuby的实现和JRuby Scripting Engine加入就行了。

下载:

  • jruby.jar – download jruby-bin-1.0.tar.gz file from JRuby website and extract the files jruby.jar, asm-2.2.3.jar, asm-commons-2.2.3.jar, backport-util-concurrent.jar from directory jruby-1.0/lib/. You don’t need the other files.
  • jruby-engine.jar – download jsr223-engines.tar.gz file from scripting.dev.java.net and extract the file jruby/build/jruby-engine.jar

使用Maven添加相关依赖:

  • jruby – groupId=org.jruby artifactId=jruby version=1.1.2
  • jruby-engine – groupId=javax.scripting artifactId=jruby-engine version=20080611

jruby-engine需要添加附加的repository,例如http://shibboleth.internet2.edu/downloads/maven2

之后的使用和JavaScript的例子一样,当然,语法不一样。

使用下面的代码可以打印支持的脚本信息

ScriptEngineManager mgr = new ScriptEngineManager();
for (ScriptEngineFactory factory : mgr.getEngineFactories()) {
	System.out.println("ScriptEngineFactory Info");
	System.out.printf("\tScript Engine: %s (%s)\n", factory
		.getEngineName(), factory.getEngineVersion());
	System.out.printf("\tLanguage: %s (%s)\n", factory
		.getLanguageName(), factory.getLanguageVersion());
	for (String name : factory.getNames()) {
		System.out.printf("\tEngine Alias: %s\n", name);
	}
}

本地输出示例

ScriptEngineFactory Info
Script Engine: Mozilla Rhino (1.6 release 2)
Language: ECMAScript (1.6)
Engine Alias: js
Engine Alias: rhino
Engine Alias: JavaScript
Engine Alias: javascript
Engine Alias: ECMAScript
Engine Alias: ecmascript
ScriptEngineFactory Info
Script Engine: JRuby Engine (1.1.4)
Language: ruby (1.8.6)
Engine Alias: jruby
Engine Alias: ruby

本文主要参考: Java Scripting and JRuby Examples