2012-04-07 61 views
13

空當運行下面的代碼段中,engine變量當我使用OpenJDK 7的(java-7-openjdk-i386)設置爲null嘗試使用犀牛,getEngineByName所(「JavaScript的」)返回在OpenJDK 7的

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

參見[Javascript引擎無法找到](http://stackoverflow.com/questions/6089773);如果有的話,JDK提供者可以選擇要打包的腳本引擎。 – McDowell 2012-04-07 13:59:04

+0

有趣的是,jdk 7在debian上對我有同樣的問題。 jdk6的jrunsript運行javascript引擎,並且jdk 7 jrunsript打印出「無法找到語言js的引擎」。 – josefx 2012-04-07 19:45:56

+0

注意:您無法確定給定的腳本引擎是否可用。如果你真的需要它,把它帶到你自己身邊。 – 2012-04-10 08:30:21

回答

3

[更新:這是一個錯誤,現已been fixed]

總之,這可能是一個錯誤。

犀牛支持類(com.sun.script.javascript.*)不會被編譯到rt.jar (雖然我發現引用這個是太陽和Mozilla之間的融合問題,我知道已經有命名空間的問題,他們在OpenJDK 7的存在源代碼並在makefile中引用),並且它們也從resources.jarMETA-INF/services中丟失。這是不是與OpenJDK的6,其中有以此爲META-INF/services/javax.script.ScriptEngineFactory項的情況下:

#script engines supported 

com.sun.script.javascript.RhinoScriptEngineFactory #javascript 

雖然這可能是一個發行的決定沒有書面理由,所以我提出了bug #982501 in the Ubuntu OpenJDK 7 launchpad。一旦我拿到一個,會給出更好的答案。

根據this thread 1,

我聽說過的地方,Mozilla的沒有接受太陽隊變成他們的 主線分支的原因不明,但之前被opensourced即得。

還有一些碰撞問題是由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

在7〜u3-2.1.1〜pre1-1ubuntu2中修復 – Yuval 2012-06-23 11:19:50