2012-04-07 9 views
13

Cuando ejecuto el siguiente fragmento de código, la variable se establece en enginenull cuando estoy usando OpenJDK 7 (java-7-openjdk-i386).Tratar de utilizar Rhino, getEngineByName ("JavaScript") devuelve nulo en 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(); 
     } 
    } 

} 

Funciona muy bien con java-6-openjdk y Oracle de jre1.7.0. ¿Alguna idea de por qué?

Estoy usando Ubuntu 11.10. Todas las JVM están instaladas en /usr/lib/jvm.

+0

Véase también [motor de Javascript no se puede encontrar] (http://stackoverflow.com/questions/6089773); Los proveedores de JDK pueden elegir qué motores de scripts incluir, en su caso. – McDowell

+0

interesante, jdk 7 tiene el mismo problema para mí en Debian. jrunsript de jdk6 ejecuta el motor de javascript y jdk 7 jrunsript imprime "engine for language js no se puede encontrar". – josefx

+0

Nota: no puede estar seguro de que un motor de script determinado esté disponible. Si realmente lo necesitas, tráelo tú mismo. –

Respuesta

3

[Actualización: Esto fue un error, que tiene ahora been fixed]

En pocas palabras, esto podría ser un error.

clases de apoyo Rhino (com.sun.script.javascript.*) no se compilan en rt.jar (aunque he encontrado referencias a que esta es una cuestión fusión entre Sun y Mozilla, y sé que ha habido problemas de espacio de nombres, que existen en el OpenJDK 7 fuente y se hace referencia en el archivo MAKE), y tampoco se encuentran en resources.jar 's META-INF/services. Este no es el caso con OpenJDK 6, que tiene esto como una entrada META-INF/services/javax.script.ScriptEngineFactory:

#script engines supported 

com.sun.script.javascript.RhinoScriptEngineFactory #javascript 

Aunque esto podría ser una decisión distribución no hay ninguna razón para ello por escrito, por lo que presentó una bug #982501 in the Ubuntu OpenJDK 7 launchpad. Daré una mejor respuesta una vez que obtenga uno.

1 según this thread,

que había oído en alguna parte que Mozilla no aceptó los cambios Soles en sus rama de la línea principal por razones desconocidas, pero eso fue antes de ser opensourced.

También ha habido algunos problemas de colisión provocado por un conflicto versiones de JRE y un byor (bring-le-propio-Rhino) versión (por ejemplo bug #255149 on Ubuntu OpenJDK 7 launchpad). Sin embargo, la fuente se encuentra en el OpenJDK 7 source y se menciona en el makefile, y el puerto BSD, mencionado en el hilo anterior, tiene el mismo sources.

2 De acuerdo con este Sol bug #6876736, esto es una decisión basada en la distribución:

Las fuentes de rinocerontes no son parte de OpenJDK, que depende de las distribuciones para agregarlo.

Algo en contraste con el hecho de que están registrados en el mercurial de OpenJDK, pero creo que la idea es que Rhino no está en la especificación JDK.

+1

Solucionado en 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 – Yuval

Cuestiones relacionadas