Насхорн под Java 7

Я пытаюсь запустить Oracle Nashorn под Java 7.

Я клонировал репо и скомпилировал исходный код. Все, что мне нужно было сделать, чтобы его скомпилировать, это:

  • Измените jdk.internal.org.objectweb.asm.* на org.objectweb.asm.*
  • Измените одну строку со статическим Long.hashCode().

Все кажется счастливым, и Java 7 рассматривает Nashorn как скриптовый движок; но когда я пытаюсь получить экземпляр:

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();

Я получаю исключение:

java.lang.RuntimeException: java.lang.ClassNotFoundException: jdk.nashorn.internal.objects.Global в jdk.nashorn.internal.runtime.Context.newGlobalTrusted(Context.java:831) в jdk.nashorn.internal.runtime.Context .newGlobal(Context.java:636) в jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:270) в jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:266) в java.security.AccessController.doPrivileged(собственный метод) в jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:266) в jdk.nashorn.api.scripting.NashornScriptEngine.(NashornScriptEngine.java:104) в jdk .nashorn.api.scripting.NashornScriptEngine.(NashornScriptEngine.java:78) в jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:139)

jdk.nashorn.internal.objects.Global находится в моем пути к классу. Возможно, Nashorn использует другой загрузчик классов?


person Kong    schedule 05.06.2013    source источник


Ответы (1)


Ранее я пытался заставить его работать под 7 и столкнулся с той же ошибкой, что и у вас. Я думаю, это связано с тем, что Nashorn использует некоторые новые функции в Java 8.

Существует бэкпорт Nashorn для JDK 7 на bitbucket; Я написал сообщение в блоге с подробным описанием того, как использовать его в моем рабочем блоге здесь. Вы также можете посмотреть этот вопрос о переполнении стека для получения дополнительной информации.

Этот проект bitbucket не обновлялся некоторое время, я бы рекомендовал вам использовать предварительную версию Java 8 если хочешь поиграть с Нашорном.

person Lyndon Armitage    schedule 03.07.2013
comment
Спасибо. В исходном коде Nashorn есть много изменений между кодом, который доступен сейчас, и бэкпортом битбакета. Код Nashorn, который выдает указанные выше ошибки, отсутствует даже в версии для битбакета. - person Kong; 04.07.2013
comment
Я перестал использовать его, как только вышел предварительный просмотр Java 8, в котором был Nashorn. Если вы используете Nashorn через API JSR223, ваш код будет работать с Rhino в Java 7, если он написан правильно, как я сейчас разрабатываю с ними обоими. - person Lyndon Armitage; 04.07.2013