Java 如何指定确切的rhino实现而不是嵌入JDK的实现?
我在应用程序中使用rhino脚本。 我发现在不同的环境下,它的工作原理是不同的。 例如,在OpenJDK上,此代码不起作用Java 如何指定确切的rhino实现而不是嵌入JDK的实现?,java,rhino,javax.script,Java,Rhino,Javax.script,我在应用程序中使用rhino脚本。 我发现在不同的环境下,它的工作原理是不同的。 例如,在OpenJDK上,此代码不起作用 eval("JSON.stringify({id:1})") 而在Oracle的JDK上是有效的 这显然是因为每个JDK都包含自己的Rhino实现 我向依赖项添加了以下内容: <dependency> <groupId>org.mozilla</groupId> <artifactId>rhino</a
eval("JSON.stringify({id:1})")
而在Oracle的JDK上是有效的
这显然是因为每个JDK都包含自己的Rhino实现
我向依赖项添加了以下内容:
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino</artifactId>
<version>1.7R4</version>
</dependency>
您需要一个
javax.script.ScriptEngine
的实现,它使用包org.mozilla.javascript
,而不是JDK的实现,后者使用重新打包的sun.org.mozilla.javascript.internal
就是这样一个实现,从OpenJDK源代码借用而来。更多。什么是“简单JDK”?从Oracle网站下载的JDK。啊,那么Oracle JDK。那么,您是否正在考虑将rhino实现与应用程序打包在一起?你有没有看过一些关于它的帖子,比如?如果你试图遵循它,你的确切问题是什么?也许你在谈论不同版本的犀牛?Rhino是“实现”,只有一个。但是当然有不同的版本,而且可能每个版本中可用的Javascript api都不同。JDK自述文件实际上准确地解释了如何为您处理此问题:。以防链接损坏:捆绑Rhino的软件包已经更改,因此您只需使用正确的Rhino原始软件包就可以使用更高版本。我明白了什么是令人困惑的。我尝试不直接调用rhino,而是通过javax.scriptAPI调用rhino。
new ScriptEngineManager().getEngineByName("JavaScript").eval("JSON.stringify({})")