Попытка использовать Rhino, getEngineByName ("JavaScript") возвращает null в OpenJDK 7
когда я запускаю следующий фрагмент кода,engine
переменная имеет значение null
когда я использую OpenJDK 7 (java-7-openjdk-i386
).
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();
}
}
}
он работает с java-6-openjdk
и Oracle jre1.7.0
. Есть идеи почему?
Я использую Ubuntu 11.10. Все JVMs установлены под /usr/lib/jvm
.
2 ответов
[Update: это была ошибка, которая теперь исправлено]
короче говоря, это может быть ошибка.
классы поддержки Rhino (com.sun.script.javascript.*
) не компилируются в rt.jar
1 (хотя я нашел ссылки на то, что это проблема слияния между Sun и Mozilla, и я знаю, что были проблемы с пространством имен, они существуют в источнике OpenJDK 7 и ссылаются на makefile), и они отсутствуют из resources.jar
' s META-INF/services
как хорошо. Это не случай с OpenJDK 6, который имеет это как META-INF/services/javax.script.ScriptEngineFactory
запись:
#script engines supported
com.sun.script.javascript.RhinoScriptEngineFactory #javascript
хотя это может быть решение дистр2 нет никакой письменной причины для этого, поэтому я подал ошибка #982501 в панели запуска Ubuntu OpenJDK 7. Даст лучший ответ, как только я его получу.
1 по этой теме,
Я где-то слышал, что Mozilla не принимает изменения Солнца в их ветви по неизвестным причинам но это было до открытия.
также были некоторые проблемы столкновения, вызванные конфликтующими версиями JRE и версией BYOR (bring-you-own-Rhino) (например,ошибка #255149 на Ubuntu OpenJDK 7 launchpad). Однако источник находится в OpenJDK 7 источник и упоминается в make-файл, а порт BSD, упомянутый в приведенном выше потоке, имеет идентичный источник.
2 Согласно этому солнцу ошибка #6876736, это решение на основе дистрибутива:
источники rhino не являются частью OpenJDK, это зависит от дистрибутивов, чтобы добавить его.
несколько в отличие от того, что они зарегистрированы в OpenJDK mercurial, но я думаю, что идея в том, что Rhino не находится в спецификации JDK.
вы должны зарегистрировать службу Rhino, но я не знаю точно, как, создавая файл внутри META-INF
или вы можете пропустить API скрипта и использовать его напрямую.
проверьте этот простой пример:
https://github.com/mozilla/rhino/blob/master/examples/Control.java