2012-04-07 5 views
13

Quando eseguo il seguente pezzo di codice, la variabile engine è impostato su null quando sto usando OpenJDK 7 (java-7-openjdk-i386).Cercando di usare Rhino, getEngineByName ("JavaScript") restituisce nulla in 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(); 
     } 
    } 

} 

Funziona bene con java-6-openjdk e Oracle di jre1.7.0. Qualche idea del perché?

Sto usando Ubuntu 11.10. Tutte le JVM sono installate sotto /usr/lib/jvm.

+0

Vedi anche [motore Javascript non può essere trovato] (http://stackoverflow.com/questions/6089773); I provider JDK possono scegliere quali motori di script includere nel pacchetto, se presenti. – McDowell

+0

interessante, jdk 7 ha lo stesso problema per me su debian. jrunsript di jdk6 esegue il motore javascript e jdk 7 jrunsript stampa "motore per linguaggio js non può essere trovato". – josefx

+0

Nota: non è possibile essere certi che un determinato motore di script sia disponibile. Se ne hai davvero bisogno, portalo tu stesso. –

risposta

3

[Update: Questo è stato un errore, che ha ormai been fixed]

In breve, questo potrebbe essere un bug.

classi di supporto Rhino (com.sun.script.javascript.*) non vengono compilate in rt.jar (anche se ho trovato riferimenti a questo essere un problema di fusione tra Sun e Mozilla, e so che ci sono stati problemi di spazio dei nomi, esse esistono nella OpenJDK 7 fonte e sono referenziati nel makefile) e mancano anche dal numero resources.jar di META-INF/services. Questo non è il caso di OpenJDK 6, che ha questo come voce META-INF/services/javax.script.ScriptEngineFactory:

#script engines supported 

com.sun.script.javascript.RhinoScriptEngineFactory #javascript 

Anche se questo potrebbe essere una decisione distro non c'è motivo scritto per esso, così ho presentato un bug #982501 in the Ubuntu OpenJDK 7 launchpad. Darà una risposta migliore una volta ottenuta.

1 secondo this thread,

avevo sentito da qualche parte che Mozilla non ha accettato Soli cambiamenti nel loro ramo linea principale per ragioni sconosciute, ma che era prima di essere opensourced.

Ci sono stati anche alcuni problemi causati da collisione contrastanti versioni di JRE e un byor versione (bring-si-proprio-Rhino) (ad esempio bug #255149 on Ubuntu OpenJDK 7 launchpad). Tuttavia, la fonte è nell'OpenJDK 7 source e menzionata nella porta e BSD, menzionata nella discussione sopra, ha lo stesso sources.

2 Secondo questa Sun bug #6876736, questo è quello di una decisione distro basata su:

Le fonti di rinoceronte non sono parte di OpenJDK, spetta alle distribuzioni per aggiungerlo.

Un po 'in contrasto con il fatto che sono registrati nel mercurial di OpenJDK, ma penso che l'idea è che Rhino non è nelle specifiche JDK.

+1

Risolto in 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 – Yuval

Problemi correlati