在哪里可以找到可用的JSR-223脚本语言列表?

45
我需要一个基于JVM的脚本语言来开发我的应用程序,想看看除了Groovy、Ruby和Python之外还有什么其他选择。
谷歌一直在将我指向一个失效的页面:http://scripting.dev.java.net/

5
在 Stack Overflow 上,“有用”和“离题”的问题之间的相关性为0.99。 - Dave
1
HDave,SO早已超出了它的教条主义轨道。其他StackExchange网站要明智得多。 - alife
4个回答

33

这不是官方列表,但你可以从这里开始:http://en.wikipedia.org/wiki/List_of_JVM_languages

Oracle JDK/JRE默认实现了Rhino(JavaScript)。

使用此代码,您可以查看JDK中可用的脚本语言:

import java.util.*;
import javax.script.*;

public class A {

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

        }

    }

}

这个示例的源自于此:http://www.oracle.com/technetwork/articles/javase/scripting-140262.html

你可能也想尝试一下Lua。可以在这里看看:如何在Java中嵌入Lua?


2
我不明白JVM语言和脚本语言之间的联系。顺便说一下,我运行了这个类,但是它只返回了Rhino。还是很好有这段代码...谢谢。 - Dave
@HDave:JVM上有一些脚本语言和非脚本语言。是的,默认情况下JRE中只有Rhino。 - davidbuzatto
4
不能保证JavaScript在您的JRE中可用,Oracle只是恰好包含了它。 - Thorbjørn Ravn Andersen
1
这并没有回答问题;JSR-223兼容的语言只是可以在JVM上运行的语言的子集。 - Jason S

31

原网页位于https://web.archive.org/web/20070610234337/https://scripting.dev.java.net/

托管在JSR-223项目页面上的可以在https://web.archive.org/web/20140909141915/https://java.net/projects/scripting/sources/svn/show/trunk/engines浏览,但列表如下:

JSR-223脚本引擎

  • AWK
  • BeanShell
  • ejs
  • FreeMarker
  • Groovy
  • Jaskell
  • Java
  • JavaScript
  • JavaScript (Web浏览器)
  • Jelly
  • JEP
  • Jexl
  • jst
  • JudoScript
  • JUEL
  • OGNL
  • Pnuts
  • Python
  • Ruby
  • Scheme
  • Sleep
  • Tcl
  • Velocity
  • XPath
  • XSLT

在其他地方维护的JSR 223脚本引擎

  • JavaFX脚本
  • ABCL
  • AppleScript
  • Bex脚本
  • OCaml Scripting Project
  • PHP
  • PHP (另一个)
  • Python
  • Smalltalk
  • CajuScript
  • MathEclipse
  • Kotlin

要获取下载链接,请查看我上面提到的index.html。对于任何java.net项目,只需删除dev,因此scripting.dev.java.net变为scripting.java.net。您可能需要在旧的网页存储库中浏览。

有一个显著的事情,JavaScript引擎(Rhino)正在完全重写为Java 8。新名称是Nashorn。更多信息请参见:http://openjdk.java.net/projects/nashorn/


2
给出的链接已经失效:“很抱歉,java.net网站已关闭。”我在这里找到了一个镜像:https://github.com/scijava/javax-scripting - Jonathan
请注意,Freemarker正在等待JSR-223的贡献。https://freemarker.apache.org/contribute.html - user7294900
2
请注意,Nashorn在JDK 11中已被弃用并将进行删除。由于Rhino仍然存在于JSR-223脚本API中,因此您仍然可以请求JavaScript,但我不会建议在新项目中依赖Nashorn。 - drrob
1
列表显示Java。我们可以将Java用作脚本语言吗? - AhmedRana
1
@drrob JSR-223 的目的是让您不依赖特定的执行。替换 Nashorn 的新执行是 GraalVM。它不会回到 Rhino。 - OrangeDog
显示剩余2条评论

2
我不知道是否有一个全面的列表。
但是值得指出的是,只要支持运行时动态编译/执行,你就可以使用几乎任何可嵌入JVM语言进行脚本编写。它是否符合JSR233并不重要。
例如,我在我的一些应用程序中使用Clojure进行脚本编写(使用自定义DSL)。
我自己没有尝试过,但我认为你也可以使用Scala:scala as scripting language 对于个人选择,我的建议如下:
  • Clojure 用于表达能力 / DSL功能(如果你自己或与专家团队一起使用脚本编写功能)
  • Groovy 如果你的主要目标是为终端用户提供易用性(因为它简单易学且类似于Java)

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接