14

当我运行以下代码时,engine变量设置为null当我使用 OpenJDK 7 ( java-7-openjdk-i386) 时。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class TestRhino {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        try {
            System.out.println(engine.eval("1+1"));
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

java-6-openjdk与 Oracle 的jre1.7.0. 知道为什么吗?

我正在使用 Ubuntu 11.10。所有 JVM 都安装在/usr/lib/jvm.

4

2 回答 2

3

[更新:这是一个错误,现已修复]

简而言之,这可能是一个错误。

Rhino支持com.sun.script.javascript.*rt.jar,并且它们也从resources.jar'sMETA-INF/services中丢失。这不是 OpenJDK 6 的情况,它有一个META-INF/services/javax.script.ScriptEngineFactory条目:

#script engines supported

com.sun.script.javascript.RhinoScriptEngineFactory #javascript

尽管这可能是发行版决定2,但没有书面理由,因此我在 Ubuntu OpenJDK 7 启动板中提交了错误 #982501。一旦我得到一个会给出更好的答案。

1根据这个线程

我在某处听说 Mozilla 不接受 Suns 对其主线分支的更改,原因不明,但那是在开源之前。

由于 JRE 版本和 BYOR(自带犀牛)版本冲突(例如Ubuntu OpenJDK 7 启动板上的错误 #255149 ),还存在一些冲突问题。但是,源代码在 OpenJDK 7源代码中并在makefile中提到,并且上述线程中提到的 BSD 端口具有相同的源代码

2 根据这个 Sun错误 #6876736,这是基于发行版的决定:

rhino 源不是 OpenJDK 的一部分,由发行版添加它。

与它们被签入 OpenJDK mercurial 的事实有些相反,但我认为这个想法是 Rhino 不在 JDK 规范中。

于 2012-04-15T19:02:25.380 回答
0

您必须注册 Rhino 服务,但我不知道具体如何,是通过在 META-INF 中创建一个文件

或者您可以跳过脚本 API 并直接使用它。

检查这个基本示例:

https://github.com/mozilla/rhino/blob/master/examples/Control.java

于 2013-11-07T04:31:09.837 回答