getEngineByName ("nashorn") возвратит null

не могу получить Nashorn engine

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-ea"

Java (TM) SE среда выполнения (build 1.8.0_20-ea-b23)

4 ответов


его работа, когда я передаю null param в конструктор ScriptEngineManager:

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

из java docs

ScriptEngineManager (загрузчик загрузчиков классов)

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


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

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

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

как использовать Nashorn


этот код корректен и работает как на 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#sthref14

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