Java 有一个ScriptEngine系统,允许您以不同的语言运行/评估语句。
我知道 JavaScript 是受支持的,但我找不到任何其他语言可以使用它。
例如,是否实现了 Ruby?
5 回答
这是一个用于确定系统上所有语言的脚本:
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);
}
}
}
希望这可以帮助。
..我知道支持 JavaScript 的事实,..
ECMAscript,技术上。
..但我找不到任何其他语言可以使用它。例如,是否实现了 Ruby?
不,ECMAscript 引擎是唯一默认包含的引擎,这是我最后一次听说的。
更新
以下 Pointy 的评论表明 Nashorn 引擎已被弃用,并将“很快”被删除。
不在 ScriptEngine 中,但您仍然可以使用 BSF。从Apache Commons Bean Scripting Framework中,您可以在此处找到它的文档。-
BSF 2.x 目前支持多种脚本语言:
- Javascript(使用来自 Mozilla 项目的 Rhino ECMAScript)
- NetRexx(IBM REXX 脚本语言在 Java 中的扩展)
- Commons JEXL
- Python(使用 Jython)
- Tcl(使用 Jacl)
- XSLT 样式表(作为 Apache XML 项目的 Xalan 和 Xerces 的一个组件)
此外,它们自己的 BSF 引擎还支持以下语言:
还有其他几种语言可用。例如,Jython(Java 中的 Python 实现)。使用其他语言的方法是将 JAR 文件添加到 CLASSPATH 并引用正确的名称。
对于 Ruby,有 JRuby。请参阅以下内容:https ://github.com/jruby/jruby/wiki/JavaIntegration
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine rubyEngine = m.getEngineByName("jruby");
Java ScriptEngine API 将适用于所有 JSR-223 脚本语言。我之前没有找到完整的文档列表,但是这篇文章做得很好, 我在哪里可以找到可用的 JSR-223 脚本语言列表? 这是该帖子中的一个列表,
JSR-223 脚本引擎
- AWK
- 豆壳
- ejs
- 自由标记
- 时髦的
- 雅斯凯尔
- 爪哇
- JavaScript
- JavaScript(网络浏览器)
- 果冻
- 杰普
- 杰克斯
- jst
- 柔道文
- 尤尔
- OGNL
- 坚果
- Python
- 红宝石
- 方案
- 睡觉
- Tcl
- 速度
- XPath
- XSLT
JSR 223 脚本引擎在其他地方维护
- JavaFX 脚本
- ABCL
- 苹果脚本
- Bex 脚本
- OCaml 脚本项目
- PHP
- PHP(另一种)
- Python
- 短暂聊天
- CajuScript
- 数学日食
大多数都有一个特殊的实现来让它工作。例如,单独使用 python 将无法工作,您需要将 Jython jar 添加到类路径中。Ruby 也一样,你需要 JRuby。