Java拥有一个ScriptEngine系统,允许您在不同的语言中运行/评估语句。
我知道JavaScript得到支持,但我找不到任何其他可以与其一起工作的语言。
例如,Ruby是否被实现了?
Java拥有一个ScriptEngine系统,允许您在不同的语言中运行/评估语句。
我知道JavaScript得到支持,但我找不到任何其他可以与其一起工作的语言。
例如,Ruby是否被实现了?
以下是一个用来确定系统中所有语言的脚本:
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目前支持多种脚本语言:
此外,以下语言支持其自己的 BSF 引擎:
java.util.ServiceLoader
机制(服务发现/服务提供程序接口)进行自注册的。这意味着在META-INF\services
库中创建了一个文件,指向ScriptEngineFactory
接口的实现。这取决于特定语言是否将其添加到脚本语言的“核心”jar中,或者是否通过单独的jar完成此操作。例如,beanshell将其添加到核心org.apache-extras.beanshell:bsh
jar中,自2.0版本以来。将此jar添加到类路径即可在ScriptEngine中使用。 - slindenau还有一些其他的语言可供选择。例如,Jython(Java中的Python实现)。使用其他语言的方法是将JAR文件添加到CLASSPATH并引用正确的名称。
对于Ruby,有JRuby。请参见以下内容:https://github.com/jruby/jruby/wiki/JavaIntegration
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine rubyEngine = m.getEngineByName("jruby");