尝试使用Rhino,getEngineByName("JavaScript")在OpenJDK 7中返回null

Yuv*_*val 14 javascript java openjdk rhino javax.script

当我运行以下代码时,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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

Yuv*_*val 3

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

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

Rhino 支持类 ( com.sun.script.javascript.*) 未编译为rt.jar1(尽管我发现这是 Sun 和 Mozilla 之间的合并问题,而且我知道存在名称空间问题,它们确实存在于 OpenJDK 7 源代码中并在 makefile 中引用) ,并且resources.jar它们也从 中丢失META-INF/services。OpenJDK 6 的情况并非如此,它有以下条目META-INF/services/javax.script.ScriptEngineFactory

#script engines supported

com.sun.script.javascript.RhinoScriptEngineFactory #javascript
Run Code Online (Sandbox Code Playgroud)

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

1 根据此线程

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

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

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

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

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