getEngineByName("nashorn") возвращает ноль

Не могу получить Nashorn двигатель

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("print('Hello World!');");

engine возвращается null

Я использую eclipse, jdk1.8.0_11

java -version

Java-версия "1.8.0_20-еа"

Java (TM) SE Runtime Environment (сборка 1.8.0_20-ea-b23)

4 ответа

Решение

Это работает, когда я передаю нулевой параметр в конструктор ScriptEngineManager:

ScriptEngine engine = new ScriptEngineManager(null).getEngineByName("nashorn");
engine.eval("print('Hello World!');");

из документов Java

ScriptEngineManager (загрузчик ClassLoader)

Если loader равен null, загружаются фабрики обработчиков сценариев, которые связаны с платформой и находятся в обычных каталогах расширений (установленных расширений).

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

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

Nashorn - это библиотека Oracle, поэтому, если у вас нет Oracle Java, вы должны импортировать ее вручную.

Как использовать нашорн

Этот код корректен и работает как на Oracle JDK, так и на OpenJDK.

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

Вам следует использовать последнюю версию JDK 8 (используемая вами версия ea устарела и, вероятно, содержит ошибки).

Официальная документация Nashorn находится здесь: http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/intro.html

Nashorn - это проект OpenJDK, размещенный здесь: http://openjdk.java.net/projects/nashorn/

Другие вопросы по тегам