如何指定精确的rhino实现而不是嵌入到JDK的实现?

时间:2014-11-27 11:29:44

标签: java rhino javax.script

我在我的应用程序中使用rhino脚本。 我发现在不同的环境中它的工作方式不同。 例如,在open-jdk上,这段代码不起作用

eval("JSON.stringify({id:1})")

而在甲骨文的JDK工作。

这显然是因为每个JDK都包含它自己的Rhino实现。

我在依赖项中添加了以下内容:

<dependency>
    <groupId>org.mozilla</groupId>
    <artifactId>rhino</artifactId>
    <version>1.7R4</version>
</dependency>

如何指定使用此实现?

更新:我没有直接调用rhino,而是通过javax.script API调用

new ScriptEngineManager().getEngineByName("JavaScript").eval("JSON.stringify({})")

1 个答案:

答案 0 :(得分:0)

您需要使用javax.script.ScriptEngine的实现,该实现使用包org.mozilla.javascript,而不是使用重新打包的sun.org.mozilla.javascript.internal的JDK实现。

de.christophkraemer:rhino-script-engine是一个从OpenJDK源中借用的实现。更多details here