¿Cómo se cargan los módulos JavaScript precompilados en RingoJS?
-
14-12-2019 - |
Pregunta
Bien, entonces creé un archivo JavaScript llamado test.js
que contiene el siguiente código:
print("It works!");
Lo compilé usando el compilador JavaScript de Rhino sin ningún error.Luego creé un nuevo archivo llamado foo.js
que contiene este código:
var test = require("./test.class");
Ahora cuando corro foo.js
en Ringo arroja la siguiente excepción y seguimiento de pila:
Uncaught exception:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.ringojs.tools.launcher.Main.run(Main.java:66)
at org.ringojs.tools.launcher.Main.main(Main.java:45)
Caused by: java.lang.NoClassDefFoundError: /home/aaditmshah/test (wrong name: test)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at org.mozilla.javascript.DefiningClassLoader.defineClass(DefiningClassLoader.java:62)
at org.ringojs.engine.ClassModuleLoader.load(ModuleLoader.java:126)
at org.ringojs.engine.ReloadableScript.compileScript(ReloadableScript.java:153)
at org.ringojs.engine.ReloadableScript.getScript(ReloadableScript.java:118)
at org.ringojs.engine.ReloadableScript.exec(ReloadableScript.java:227)
at org.ringojs.engine.ReloadableScript.load(ReloadableScript.java:215)
at org.ringojs.engine.RingoWorker.loadModuleInternal(RingoWorker.java:283)
at org.ringojs.engine.Require.call(Require.java:81)
at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3._c_script_0(/home/aaditmshah/foo.js:1)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3.call(/home/aaditmshah/foo.js)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:426)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3178)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3.call(/home/aaditmshah/foo.js)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3.exec(/home/aaditmshah/foo.js)
at org.ringojs.engine.ReloadableScript.evaluate(ReloadableScript.java:186)
at org.ringojs.engine.RingoWorker.evaluateScript(RingoWorker.java:315)
at org.ringojs.engine.RhinoEngine.runScript(RhinoEngine.java:186)
at org.ringojs.tools.RingoRunner.run(RingoRunner.java:152)
... 6 more
enter code here
No sé dónde me estoy equivocando.Tengo las últimas versiones de Ringo y Rhino 1.7R3.Agregué el directorio actual a mi classpath anteponiendo la siguiente línea a foo.js
:
addToClasspath(module.resolve("."));
Sin embargo, todavía genera el mismo error.No tengo idea de cómo hacer que esto funcione.Cualquier ayuda será apreciada.
Solución
Bien, miré el seguimiento de la pila un poco más de cerca y me di cuenta de que está encontrando el archivo de clase correctamente, simplemente intenta cargarlo desde el paquete incorrecto (home.aaditmshah.test
en lugar de solo test
).Si el archivo de clase está en la ruta de su módulo, puede cargarlo correctamente con solo el nombre del módulo (clase).De forma predeterminada, el directorio actual no está en la ruta del módulo, por lo que primero deberá agregarlo:
require.paths.push('.')
var test = require("test.class");