当我运行以下代码时,当我使用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
下。
答案 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