2009-05-19 11 views
9

Aquí está mi situación:Cómo cargar archivos .js en un contexto de Rhino en Java

Tengo acceso a un objeto Rhino Context en una clase Java. Quiero leer un montón de archivos .js y pasarlos al contexto de Rhino para que se los evalúe. No estoy realmente interesado en tener las funciones en los archivos .js disponibles en el contexto de scripting tanto como en tener las variables que están declaradas en los archivos .js disponibles (este es un tipo de problema de validación de herramientas).

Idealmente, leería y trataría de evaluar cada archivo de una vez, no línea por línea. Noté que hay un método en contexto (ver Rhino API) llamado evaluateReader(). Mi primera suposición es que debería obtener todos los archivos que quiero cargar, revisarlos todos y llamar a este método que pasa algún tipo de objeto lector para cada uno, y genial, ahora están todos en mi contexto de scripting.

Entonces, suponiendo que estoy en el camino correcto, ¿alguien puede decirme si hay algunas buenas prácticas a seguir para usar archivos .js en contextos de scripting de Java, o si hay una mejor manera de hacerlo, o lo hiciste de otra manera, etc.?

No busco detalles de implementación aquí, solo comentarios de otras personas que podrían haber hecho esto en algunos de sus códigos. Jugar con lenguajes de scripting desde Java es nuevo para mí.

Respuesta

12

¿Sabía que Rhino ships in Java 6?

String javaScriptExpression = "sayHello(name);"; 
Reader javaScriptFile = new StringReader(
    "function sayHello(name) {\n" 
     + " println('Hello, '+name+'!');\n" + "}"); 

ScriptEngineManager factory = new ScriptEngineManager(); 
ScriptEngine engine = factory 
    .getEngineByName("JavaScript"); 
ScriptContext context = engine.getContext(); 
context.setAttribute("name", "JavaScript", 
    ScriptContext.ENGINE_SCOPE); 

engine.eval(javaScriptFile); 
engine.eval(javaScriptExpression); 

Si desea utilizarlo con Java 5, que tendrá que download la API por separado. Puede obtener motores para muchos lenguajes de scripting populares desde scripting.dev.java.net.

+0

"Puede obtener motores para muchos lenguajes de scripting populares de scripting.dev.java.net." No, no podemos más. Sé que esto es extremadamente viejo, pero ¿hay algún enlace más nuevo que debamos usar? – hexafraction

+0

@hexafraction Pruebe esta pregunta: http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages ​​ – McDowell

+0

+1 Gracias, eso y el el archivo web tiene [ayudado] (http://web.archive.org/web/20070610234337/https://scripting.dev.java.net/), ya que este último es solo una bolsa de enlaces, realmente. – hexafraction

Cuestiones relacionadas