Попытка использовать 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.jar1 (хотя я нашел ссылки на то, что это проблема слияния между 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