任何教程都是Java和Nashorn编写脚本的新手?

时间:2014-03-25 19:26:43

标签: java javascript java-8 nashorn

是否有任何好的教程或喜欢用这个说明?我还没有用Java编写任何脚本,尽管我已经熟悉了JavaScript。谢谢。基本上,我想使用JavaScript / XML来处理我的项目的一部分。我知道Java 8通过Nashorn引入了JavaScript支持。我想知道它是如何工作的。我知道它涉及使用javax.script,但我不知道该包是如何工作的,也不了解Nashorn是如何工作的。

5 个答案:

答案 0 :(得分:16)

在过去的几周里我和nashorn一起玩了很多。我在一个示例驱动的教程中写了我的所有发现:

http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/

它包含以下主题:

  • 从java代码调用javascript函数
  • 从javascript调用java方法
  • 使用javascript中的java类
  • 所有语言扩展的摘要(例如,每个语言扩展)

我希望从Nashorn开始对你有所帮助。

答案 1 :(得分:11)

最近,我做了几个关于Java和JavaScript的演讲(通过Nashorn)。您可以找到我的幻灯片和示例here

这是一个非常简单的脚本运行器实现

import javax.script.*;

public class ScriptRunner {
    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
        String scriptName = args[0];
        Bindings bindings = nashorn.createBindings();
        bindings.put("scriptFileName", scriptName);
        nashorn.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
        nashorn.eval("load('src/main/resources/javascript/' + scriptFileName)");
    }

}

test.js,您可以将其作为应用程序参数传递。

print("This is hello from test.js");

此外,JDK8附带了一个工具jjs。它的CLI JavaScript解释器。它可以用于在JavaScript和Java中编写shell脚本。 (好SO advice如何在osx,linux上改进jjs。 以下是此类脚本的示例

#!/usr/local/bin/jjs -scripting

var currentDir = new java.io.File('.'),
    allFiles = currentDir.list();
print(currentDir.getCanonicalPath());
for (var i = 0; i < allFiles.length; i++) {
    print(allFiles[i]);
}

如果您有任何问题,请随时提问。

谢谢,

维克

答案 2 :(得分:2)

通过标准的Java JSR 223脚本API访问Nashorn。

这里有一个很好的通用例子:

http://www.drdobbs.com/jvm/jsr-223-scripting-for-the-java-platform/215801163

Nashorn具体指导在这里:

https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes

以下是我的代码加载静态库脚本和构建Invocable自定义函数的示例:

public class ScriptRunner {
    private static final Logger log = LoggerFactory.getLogger(ScriptRunner.class);
    private static final String ENGINE = "nashorn";
    private String functions;

    public ScriptRunner() throws IOException {
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[]  resources = resolver.getResources("your/class/path/*.js");
        log.debug("Found {} script resources", resources.length);
        StringBuilder functions = new StringBuilder();
        for (Resource resource : resources) {
            functions.append(IOUtils.toString(resource.getInputStream()));
        }
        this.functions = functions.toString();
    }

    /**
     * Build an Invocable script.
     * @param script The function code.
     * @return Compiled, invocable script.
     */
    public Invocable buildInvocable(String script) throws ScriptException {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName(ENGINE);
        engine.eval(functions);
        engine.eval(script);
        return (Invocable) engine;
    }

}

答案 3 :(得分:2)

这是一个很好的,非常基本的“入门”视频:

https://www.youtube.com/watch?v=Cxyg22C5gcw

Julien Ponge也写了一篇很好的介绍性文章:

http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html

我还会推荐Nashorn Wiki的正式文档:

https://wiki.openjdk.java.net/display/Nashorn/Main

答案 4 :(得分:1)

Nashorn是Oracle在Java编程语言中开发的JavaScript engine。它基于(JSR 292)并已随Java 8发布。 Oracle的JDK 8或OpenJDK 8包含一个名为jjs的命令行工具。它可以在JDK安装的bin /文件夹中找到,还有着名的java,javac或jar工具。

最近我在Oracle Nashorn工作并编写了一个教程。我希望这会有所帮助