我有一个项目使用ScriptEngine来处理一些javascript,并在我的机器上运行良好,但是当我将项目的jar发送到服务器时,我发现服务器的JVM没有内置的Rhino,代码调用
时返回nullnew ScriptEngineManager().getEngineByName("javascript");
我去了rhino的下载页面,获取了最新的版本,并从中提取了js.jar,在项目中添加了jar,但仍然存在同样的问题。
答案 0 :(得分:10)
JavaScript引擎仅包含在Sun / Oracle JDK中。如果您使用其他Java实现,如IBM J9或Oracle JRockit(很可能在服务器上),或者如果您不使用Sun / Oracle JDK但使用Sun / Oracle JRE(甚至更可能在服务器上),那么您不要使用JavaScript引擎。
您需要使用Sun的完整JDK。
另请注意,JDK6附带的JavaScript引擎是而不是 Rhino,它是一个剥离的lobotomized版本的几年前发布的犀牛。特别是,它缺少编译器,这意味着性能可能很糟糕。
另请注意,在Rhino和JDK6 JavaScript引擎之间,API不一定兼容,即使您设法找到它所基于的过时的Rhino版本。所以,如果你想在部署中使用Rhino,你最好也在开发中使用它。
最后但并非最不重要:仅仅因为你在Eclipse项目文件中创建了一些条目,并不意味着你的服务器的类路径会神奇地改变。您需要确保正确设置所有类路径。我对FreeBSD没有任何经验,但是我很确定包管理系统(在这种情况下是FreeBSD端口)在port install rhino
之后至少会部分地处理它。