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

时间:2012-04-07 11:56:40

标签: java javascript rhino openjdk javax.script

当我运行以下代码时,当我使用OpenJDK 7(engine)时,null变量设置为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下。

2 个答案:

答案 0 :(得分:3)

[更新:这是一个错误,现在有been fixed]

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

Rhino支持类(com.sun.script.javascript.*)未编译为rt.jar 1 (尽管我发现这是Sun和Mozilla之间的合并问题,我知道一直是名称空间问题,它们确实存在于OpenJDK 7源代码中并在makefile中引用,并且它们也在resources.jar的{​​{1}}中丢失。 OpenJDK 6不是这种情况,它将META-INF/services作为META-INF/services/javax.script.ScriptEngineFactory条目:

#script engines supported

com.sun.script.javascript.RhinoScriptEngineFactory #javascript

虽然这可能是一个发行版决定 2 但没有书面理由,所以我提交了bug #982501 in the Ubuntu OpenJDK 7 launchpad。我得到一个会给出更好的答案。

1根据this thread

  

我听说某个地方Mozilla不接受太阳队的变化   主线分支的原因不明,但是在开源之前。

由于JRE和BYOR(自带自带)Rhino版本(例如bug #255149 on Ubuntu OpenJDK 7 launchpad)的冲突版本导致了一些冲突问题。但是,源代码位于OpenJDK 7 source中并在makefile中提及,并且上述线程中提到的BSD端口具有相同的sources

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

  

犀牛来源不是OpenJDK的一部分,可以通过发行版添加它。

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

答案 1 :(得分:0)

您必须注册Rhino服务,但我不确切知道如何通过在META-INF中创建文件

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

检查这个基本示例:

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