Java имеет ScriptEngine систему, которая позволяет запускать/оценивать заявления на другом языке.
Я знаю, что JavaScript поддерживается, но я не мог найти никаких других языков для работы с ним.
Реализовано ли, например, Ruby?
Поддерживаемые языки Java ScriptEngine
Ответ 1
.. Я знаю, что поддерживается JavaScript,..
ECMAscript, технически.
.. но я не мог найти никаких других языков для работы с ним. Реализовано ли, например, Ruby?
Нет. Двигатель ECMAscript является единственным, включенным по умолчанию, в последний раз, когда я слышал.
Ответ 2
Не в ScriptEngine, но вы все равно можете использовать BSF. Из Apache Commons Bean Scripting Framework вы можете найти его Documentation здесь. -
BSF 2.x поддерживает в настоящее время несколько языков сценариев:
- Javascript (с использованием Rhino ECMAScript из проекта Mozilla)
- NetRexx (расширение языка сценариев IBM REXX на Java)
- Commons JEXL
- Python (используя Jython)
- Tcl (используя Jacl)
- Таблицы стилей XSLT (как компонент XML-проекта Apache Xalan и Xerces)
Кроме того, поддерживаются следующие языки со своими собственными двигателями BSF:
Ответ 3
Вот script, чтобы определить все языки в вашей системе:
import java.util.List;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngineFactory;
public class Test {
public static void main(String[] args)
{
ScriptEngineManager mgr = new ScriptEngineManager();
List<ScriptEngineFactory> factories = mgr.getEngineFactories();
for (ScriptEngineFactory factory : factories)
{
System.out.println("ScriptEngineFactory Info");
String engName = factory.getEngineName();
String engVersion = factory.getEngineVersion();
String langName = factory.getLanguageName();
String langVersion = factory.getLanguageVersion();
System.out.printf("\tScript Engine: %s (%s)\n", engName, engVersion);
List<String> engNames = factory.getNames();
for (String name : engNames)
{
System.out.printf("\tEngine Alias: %s\n", name);
}
System.out.printf("\tLanguage: %s (%s)\n", langName, langVersion);
}
}
}
Надеюсь, что это поможет.
Ответ 4
Доступно несколько других языков. Например, Jython (реализация Python в Java). Способ использования других языков заключается в добавлении JAR файла в CLASSPATH и создании ссылки на правильное имя.
Для Ruby существует JRuby. См. Следующее: https://github.com/jruby/jruby/wiki/JavaIntegration
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine rubyEngine = m.getEngineByName("jruby");
Ответ 5
API Java ScriptEngine будет работать со всеми языками Scripting Languages JSR-223. Я не нашел хорошо документированный полный список из них раньше, но этот пост выполняет довольно хорошую работу, Где я могу найти список доступных языков сценариев JSR-223? Вот список из этого сообщения,
Двигатели JSR-223 script
- AWK
- BeanShell
- EJS
- FreeMarker
- Groovy
- Jaskell
- Java
- JavaScript
- JavaScript (веб-браузер)
- Желе
- СЭП
- Jexl
- Jst
- JudoScript
- Juel
- OGNL
- Pnuts
- Python
- рубин
- Схема
- Sleep
- Tcl
- скорость
- XPath
- XSLT
JSR 223 script двигатели, поддерживаемые в других местах
- JavaFX Script
- ABCL
- AppleScript
- Bex Script
- Проект сценариев OCaml
- PHP
- PHP (другой)
- Python
- Smalltalk
- CajuScript
- MathEclipse
Большинство из них имеют специальную реализацию, чтобы работать. Например, только один python не будет работать, вам нужно добавить jaron jar в путь класса. Для Ruby вам понадобится JRuby.