Using Rhino JSR-223 engine with JDK8
Why?
Mozilla Rhino based JSR-223 (javax.script) engine has been removed in Oracle's JDK8 implementation. In JDK8, Nashorn engine replaces Rhino based jsr-223 engine. It is recommended that you migrate your script application to Nashorn. But, to have time to migrate your JavaScript code to nashorn, you may want to stick to Rhino based jsr-223 implementation on jdk8 (as interim solution). If this is so, this document is for you.
Step 1 get Rhino
Clone Rhino source code from this git repo, into "$rhino_dir"
https://github.com/mozilla/rhino
Use ant to build js.jar
$rhino_dir/build/rhino1_7R5pre/js.jar
If you want to get pre-built binary instead, you can download from here:
https://github.com/downloads/mozilla/rhino/rhino1_7R4.zip
In either way, you'd get js.jar file in this step.
Step 2 get JSR-223 script engine on Rhino
JSR-223 engine over Rhino is available from java.net scripting project. You can get the sources and build it using these steps:
- svn checkout https://java.net/projects/Scripting
- cd $scripting/trunk/engines/javascript/lib
- drop Rhino js.jar into the above dir
- cd ../make
- ant clean all
The above step result in $scripting/trunk/engines/javascript/build/js-engine.jar
Using Rhino JSR-223 engine
You've two jars now: js.jar and js-engine.jar. You can put these two jars in your CLASSPATH. When creating script engine in your app, you need to use "rhino" as engine name.
import javax.script.*; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager m = new ScriptEngineManager(); // specifically look for "rhino" engine ScriptEngine engine = m.getEngineByName("rhino"); System.out.println(engine.eval("33 + 232")); } } // compile above using javac Main.java // run it using java -cp js-engine.jar:js.jar Main
You can also use jrunscript" in jdk8 along with this rhino based script engine:
jrunscript -cp js-engine.jar:js.jar -l rhino