Введение в Nashorn

Введение

imageNashorn* — движок JavaScript, разрабатываемый полностью на языке программирования Java компанией Oracle. Основан на Da Vinci Machine (JSR 292) и будет доступен в составе Java 8 (релиз которой ожидается в марте 2014 года). Стоит отметить что выполнение JavaScript (и поддержка сриптинга) была уже в Java 6, но в ней использовался движок Rhino, также написанный на Java, но поддерживаемый Mozilla Foundation.

О списке нововведений в Java 8 уже писали ранее. В данной статье будет приведена пара простых примеров, которая даст вам представление об использовании Nashorn.

Применение

Зачем нужен JavaScript в Java? Например:

Примеры использования

Подготовительный этап

Устанавливаем JDK 8 Early Access. Далее по тексту подразумевается что команды javac и java выполняются для Java 8.

Hello, World!

import javax.script.*;  public class EvalScript {     public static void main(String[] args) throws Exception {         // create a script engine manager         ScriptEngineManager factory = new ScriptEngineManager();         // create a Nashorn script engine         ScriptEngine engine = factory.getEngineByName("nashorn");         // evaluate JavaScript statement         try {             engine.eval("print('Hello, World!');");         } catch (final ScriptException se) { se.printStackTrace(); }     } } 

Компилируем класс:

./javac EvalScript.java 

И выполняем его:

./java EvalScript

Видим вывод:

Hello, World!

JavaScript + Java

Nashorn позволяет использовать классы Java для создания программ. Рассмотрим следующий пример:

MyScript.js

var MyClass = Java.type("EvalScript.MyClass"); var my = new MyClass(); my.printMsg("Hello!"); 

EvalScript.java

import javax.script.*; import java.io.*;  public class EvalScript {      public static void main(String[] args) throws Exception {         // create a script engine manager         ScriptEngineManager factory = new ScriptEngineManager();         // create a Nashorn script engine         ScriptEngine engine = factory.getEngineByName("nashorn");         // evaluate JavaScript statement         try {             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));             engine.eval(br);         } catch (final ScriptException se) { se.printStackTrace(); }     }      public static class MyClass {         public void printMsg(String msg) {             System.out.println("printMsg : "+msg);         }     } } 

Для примера я создал свой внутренний класс (что не является ограничением, я мог бы создать и отдельный класс), и вызвал его из JavaScript кода. Осталось скомпилировать класс и запустить его передав на вход наш js-код:

./java EvalScript < MyScript.js

Видим вывод:

printMsg : Hello!

Вывод

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

Используемые материалы:


* Nashorn — немецкое слово, которое переводится на русский как «носорог», а на английский как «rhinoceros», что перекликается с Rhino, названием движка JavaScript, реализованного в Java и поддерживаемого компанией Mozilla Foundation. Rhino, в свою очередь, получил название в честь животного изображённого на обложке книги о JavaScript, выпущенной издательством O’Reilly Media.

ссылка на оригинал статьи http://habrahabr.ru/post/195870/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *