Как предварительно скомпилированные модули JavaScript загружаются в RingoJS? - PullRequest
3 голосов
/ 15 марта 2012

Хорошо, поэтому я создал файл JavaScript с именем test.js, который содержит следующий код:

print("It works!");

Я скомпилировал его с помощью Rhino JavaScript Compiler без каких-либо ошибок. Затем я создал новый файл с именем foo.js, который содержит этот код:

var test = require("./test.class");

Теперь, когда я запускаю foo.js в Ринго, генерируется следующее исключение и трассировка стека:

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

Я не знаю, куда я иду не так. У меня последние версии Ringo и Rhino 1.7R3. Я добавил текущий каталог в мой путь к классу, добавив следующую строку к foo.js:

addToClasspath(module.resolve("."));

Тем не менее, он по-прежнему генерирует ту же ошибку. Я понятия не имею, как заставить это работать. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 15 марта 2012

ОК, я посмотрел на трассировку стека немного ближе и понял, что он правильно находит файл класса, он просто пытается загрузить его из неправильного пакета (home.aaditmshah.test вместо просто test). Если файл класса находится в пути к модулю, вы можете загрузить его правильно, просто указав имя модуля (класса). По умолчанию текущий каталог не указан в пути к модулю, поэтому сначала его нужно добавить:

require.paths.push('.')
var test = require("test.class");
...