Рубрики
Без рубрики

Запуск ваших скриптов JavaScript/Python на Java

Java развивается, это круто. [Краткая демонстрация; переходите к следующему разделу, если вы уже готовы… Помеченный scriptengine, java, nashorn, gsoc.

[Краткая демонстрация ; перейдите к следующему разделу, если вы уже являетесь евангелистом Java]

После приобретения Java корпорацией Oracle в 2010 году с запуском Java 7 a.k.a. Проект Dolphin, это было подтверждением приверженности Oracle языку и технологиям. Это было большим достижением для двухлетнего владения технологическим гигантом Sun Microsystems – компанией, которая родила язык программирования Java. С Java SE 8, также известной как Project Spider, появились различные важные настройки и обновления языка программирования Java, включая значительное обновление функционального программирования, называемого лямбда-выражениями, новый и улучшенный API даты и времени, улучшенный движок JavaScript, новый потоковый API и многое другое, что стало революционным выпуском платформы разработки.

С такими быстрыми повторяющимися выпусками с серьезными улучшениями и простой и эффективной миграцией Java – это язык, который останется здесь навсегда.

Запрос спецификации Java, фактические описания предлагаемых и окончательных спецификаций для платформы Java, JSR 223 предложил широко обсуждаемый вопрос между разработчиками, которые использовали языки сценариев, и теми, которые вы использовали Java в качестве основного языка, только из-за сложности интеграции, настолько, что им пришлось придерживаться любого из них. С Java 6 эта проблема была решена с помощью запуска скриптового API, который улучшился с появлением Java 8. По умолчанию присутствует движок nashorn, но другие движки можно добавить, загрузив соответствующие движки.

До сих пор было реализовано более 2 десятков движков.

В этой статье мы поговорим о проекте Nashorn (ранее Project Rhino), который является скриптовым движком для JavaScript.

Весь скриптовый API содержится в пакете javax.script.

Этот легкий пакет содержит шесть интерфейсов:

  • Привязки
  • Компилируемый
  • Вызываемый
  • Скриптконтекст
  • СкриптЕнгайн
  • ScriptEngineFactory Скриптовый завод

пять классов:

  • Абстрактныйscriptengine
  • Скомпилированный Скрипт
  • ScriptEngineManager Скриптовый менеджер
  • Простые привязки
  • SimpleScriptContext Простой текст

и единственное исключение:

  • Исключение ScriptException

Два ключевых класса для нашего использования,

  1. ScriptEngineManager : Отвечает за обнаружение скриптового движка и хранит данные в контексте, чтобы разрешить их совместное использование с программами. Данные могут храниться в виде пар ключ/значение и быть доступными для всех скриптовых движков. Их следует рассматривать как глобальные данные.

  2. СкриптЕнгайн : Это доступная часть интерфейса java api. Это должно быть реализовано отдельно для каждого языка сценариев. Для javascript в Oracle JDK (начиная с версии 1.6) по умолчанию доступна реализация.

Apache commons предоставляет project Jakarta Bean Scripting Framework (BSF), который предоставляет реализацию для нескольких наборов языков сценариев, таких как Python, TCL, NetRexx, включая JavaScript и многое другое.

Мы начнем с базовых реализаций JavaScript с использованием движка nashorn, чтобы получить представление о том, как это работает на самом деле.

  • Принимая сценарий в качестве прямого ввода.

Вывод в виде:

30

Здесь print(10+20) передается непосредственно как строка, работает как скрипт.

Просто создав экземпляр ScriptEngineManager и затем определив движок, мы можем использовать метод Scriptengine eval() для запуска скриптов.

  • Запуск нескольких строк скрипта за один раз.

Вывод в виде:

30

Метод ScriptEngine eval() также можно использовать для запуска нескольких сценариев как одного блока.

  • Чтение файлов JavaScript

Результат – это:

Привет, мир из JavaScript

где HelloWorld.js является

Таким образом, можно прочитать файл JavaScript, вызвав файл с помощью FileReader и запустив в соответствии с требованиями.

  • Использование отдельных функций, определенных в файле JavaScript

В JavaScript можно определять различные функции и использовать их как независимые методы в программе Java.

Для этого должен быть реализован вызываемый интерфейс, который хранится в том же пакете javax.script

Например, возьмем файл JavaScript, содержащий различные методы, выполняющие арифметические операции: сложение, вычитание, умножение.

Мы можем создать экземпляры ScriptEngineManager и Script Engine статическими, если нам нужно обслуживать несколько запросов, чтобы они выполнялись сразу после загрузки файла, но что касается метода eval(), то есть процесса вызова файла JavaScript, который должен выполняться либо при каждом вызове требуемого метода, либо непосредственно в основном методе.

Результат – это:

5.0
1.0
6.0

Используя Invocable, необходимо передать имя функции в виде строки, а затем аргументы, которые ей потребуются в соответствии с реализацией в файле JavaScript.

Это ключевые базовые шаги и способы запуска скриптов JavaScript с использованием Java.

Обсуждались основные шаги по выполнению скриптов JavaScript на Java с использованием движка JavaScript Engine Nashorn.

Создайте экземпляр ScriptEngineManager для инициализации скриптового движка как экземпляра ScriptEngine. Используйте метод eval для непосредственного запуска скрипта путем передачи в виде строк или чтения файла JavaScript. Реализуйте Invocable для вызова методов, определенных в файле JavaScript, в соответствии с запросом. Это сообщение в блоге было написано во время моего проекта Google Summer of Code 2019 с сообществом JBoss, интеграция скриптового движка с WildFly Elytron, в котором я добавил пользовательскую реализацию для компонентов WildFly Elytron на языках сценариев.

Оригинал: “https://dev.to/bhaskar/running-your-javascript-python-scripts-in-java-2agb”