Подтвердить что ты не робот

Попытка использовать 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. Все JVM установлены под /usr/lib/jvm.

4b9b3361

Ответ 1

[Обновление: это была ошибка, которая теперь была исправлена ​​]

Короче говоря, это может быть ошибка.

Не поддерживаются классы поддержки Rhino (com.sun.script.javascript.*) в rt.jar 1 (хотя я нашел ссылки на это как проблему слияния между Sun и Mozilla, и я знаю, что были проблемы с пространством имен, они существуют в источнике OpenJDK 7 и упоминаются в make файле), и они отсутствуют в resources.jar 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 не принимала изменения Suns в свои магистрали по причинам, которые неизвестны, но это было до того, как они были открыты.

Также возникли некоторые проблемы с конфликтами, вызванные конфликтующими версиями JRE и версии BYOR (приносящий собственный Rhino) (например, ошибка # 255149 на Пусковая панель Ubuntu OpenJDK 7). Однако источник находится в источнике OpenJDK 7 и указан в makefile и порт BSD, упомянутый в приведенном выше потоке, имеет идентичные источники .

2 Согласно этой ошибке ошибка # 6876736, это решение на основе дистрибутива:

Источники носорогов не являются частью OpenJDK, это зависит от дистрибутивов.

В отличие от того факта, что они проверяются на OpenJDK mercurial, но я думаю, что идея заключается в том, что Rhino не входит в спецификацию JDK.

Ответ 2

Вы должны зарегистрировать службу Rhino, но я точно не знаю, как это сделать, создав файл внутри META-INF

ИЛИ Вы можете пропустить API Script и использовать его напрямую.

Проверьте этот базовый пример:

https://github.com/mozilla/rhino/blob/master/examples/Control.java