0

我开始探索 jdk 8 新的 javascript 引擎 nashorn 并想构建一些自动化任务脚本。我有一个问题,我不知道如何使用 engine.eval() 从 javascript 以脚本模式评估 js 文件,例如。

ps:我不是在谈论 jjs 脚本,它很好,但只能以一种方式工作。我想要另一种方式;使引擎在 java 脚本模式下进行评估

4

4 回答 4

1

最简单的方法是将 -Dnashorn.args=-scripting 添加到您的 java 命令行。

于 2014-05-26T12:05:40.260 回答
0

经过大量的挠头,我想出了一个技巧,我可以通过手工制作的系统进程的命令行实际启动脚本的执行:

//tricking the nashorn engine with jjs command
    public void evalScriptInScriptingMode(String fileName)
    {
        String[] args = new String[]{"jjs", "-scripting", fileName};

        //This class is used to create operating system processes
        ProcessBuilder pb = new ProcessBuilder(args);

        pb.directory(null);

        File log = new File("jjs_log.txt");

        int i = 0;

        while(log.exists())
        {
            i++;
            log = new File("jjs" + i + "_log.txt");
        }


        pb.redirectErrorStream(true);
        pb.redirectOutput(ProcessBuilder.Redirect.appendTo(log));
        Process p = null;

        try
        {
            p = pb.start();    //start the process which remains open
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
于 2014-05-25T23:54:42.660 回答
0

您可以通过 NashornScriptEngineFactory 将参数传递给脚本引擎。

import jdk.nashorn.api.scripting.NashornScriptEngineFactory

new NashornScriptEngineFactory()
    .getScriptEngine( "-scripting" )
    .eval( "" );
于 2015-04-16T14:20:06.813 回答
0

您还可以使用new NashornScriptEngineFactory().getScriptEngine("-scripting");它将在脚本模式下检索新的 Nashorn ScriptEngine。这种方法比使用系统进程稍微好一点,主要是因为它会自动将你的类添加到 nashorn 类路径中。

基本上,您可以在 java 中编写类,然后在 javascript 中使用它们。如果您不需要能够在 javascript 中引用您的类,那么系统进程应该做得很好并且不会有问题,(如果运行它的机器在其类路径中有 jjs)

于 2017-05-08T14:09:40.873 回答