JVM缺少Rhino

And*_*ler 4 java rhino scriptengine

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

new ScriptEngineManager().getEngineByName("javascript");
Run Code Online (Sandbox Code Playgroud)

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

Jör*_*tag 10

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端口)在a之后至少会部分地处理它port install rhino.