4

我有一个使用 ScriptEngine 处理一些 javascript 的项目,并且在我的机器上运行良好,但是当我将项目的 jar 发送到服务器时,我发现服务器的 JVM 没有内置 Rhino,返回 null 时代码调用

new ScriptEngineManager().getEngineByName("javascript");

我去了rhino的下载页面,得到了最新版本,并从中提取了js.jar,将jar添加到项目中,但仍然有同样的问题。

4

1 回答 1

10

JavaScript 引擎仅包含在 Sun/Oracle JDK 中。如果您使用其他 Java 实现,例如 IBM J9 或 Oracle JRockit(很可能在服务器上),或者如果您不使用 Sun/Oracle JDK 而使用 Sun/Oracle JRE(更可能在服务器上),那么您不要获取 JavaScript 引擎。

您需要使用 Sun 的完整 JDK。

另请注意,JDK6 附带的 JavaScript 引擎不是Rhino,它是几年前过时的 Rhino 版本的精简版。特别是它缺少编译器,这意味着性能可能会很糟糕。

另请注意,该 API 在 Rhino 和 JDK6 JavaScript 引擎之间不一定兼容,即使您设法找到它所基于的那个过时的 Rhino 版本。所以,如果你想在部署中使用 Rhino,你最好在开发中也使用它。

最后但同样重要的是:仅仅因为您在 Eclipse 项目文件中输入了一些条目,并不意味着您的服务器的类路径会神奇地改变。您需要确保正确设置所有类路径。我对 FreeBSD 没有任何经验,但我很确定包管理系统(在这种情况下是 FreeBSD 端口)在port install rhino.

于 2011-01-10T17:58:17.840 回答