JVM缺少Rhino

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

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

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

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

您需要使用Sun的完整JDK。

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

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

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