Incluyendo un archivo JavaScript durante Rhino eval

¿Cómo se incluiría una secuencia de comandos "Barra" desde otra secuencia de comandos "Foo" que está siendo evaluada por el motor Rhino, ejecutándose en Java?

IE, configura el motor de script como este en Java:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
BufferedReader br = new BufferedReader(new FileReader(new File("Foo.js")));
engine.eval(br);

... y poner lo siguiente en Foo:

load(["Bar.js"])

De acuerdo aDocumentación de shell Rhino, Esa es la manera de hacerlo. Pero cuando se ejecuta desde Java, claramente no está implementado:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "load" is not defined.

@Phillip:

Gracias por la respuesta creativa. La solución tal como está no funciona del todo porque eval no hace que la función analizada esté disponible a menos que se use la interfaz de Invocable. Además, no funciona en los casos en que el código Java no es accesible. Elaboré su solución y creé algo que funcionará en JS puro:

Primero crea un motor, exponiendo la interfaz Invocable:

var engine = new Packages.javax.script.ScriptEngineManager().getEngineByName("javascript");
engine = Packages.javax.script.Invocable(engine);

Luego "cargar ()" el ​​script (s)

engine.eval(new java.io.FileReader('./function.js'));

En este punto, las funciones pueden ser evaluadas con:

engine.invokeFunction("printHello", null);

Respuestas a la pregunta(1)

Su respuesta a la pregunta