20

Java 有一个ScriptEngine系统,允许您以不同的语言运行/评估语句。
我知道 JavaScript 是受支持的,但我找不到任何其他语言可以使用它。
例如,是否实现了 Ruby?

4

5 回答 5

16

这是一个用于确定系统上所有语言的脚本:

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);
        }
    }

}

希望这可以帮助。

于 2016-06-26T13:38:50.777 回答
12

..我知道支持 JavaScript 的事实,..

ECMAscript,技术上。

..但我找不到任何其他语言可以使用它。例如,是否实现了 Ruby?

不,ECMAscript 引擎是唯一默认包含的引擎,这是我最后一次听说的。

更新

以下 Pointy 的评论表明 Nashorn 引擎已被弃用,并将“很快”被删除。

于 2013-11-16T01:12:54.017 回答
5

还有其他几种语言可用。例如,Jython(Java 中的 Python 实现)。使用其他语言的方法是将 JAR 文件添加到 CLASSPATH 并引用正确的名称。

对于 Ruby,有 JRuby。请参阅以下内容:https ://github.com/jruby/jruby/wiki/JavaIntegration

ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine rubyEngine = m.getEngineByName("jruby");
于 2013-11-16T01:18:09.733 回答
5

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。

于 2014-07-07T01:29:27.823 回答