我开始探索jdk 8新的javascript引擎nashorn,并希望构建一些自动化任务脚本。我有一个问题,我不知道如何使用engine.eval()例如从javascript在脚本模式下评估js文件。
p.s:我不是在谈论jjs -scripting哪个好,但只能单向运行。我想要另一种方式;从java
以脚本模式评估引擎答案 0 :(得分:1)
最简单的方法是将-Dnashorn.args = -scripting添加到java命令行。
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
您可以通过NashornScriptEngineFactory将参数传递给脚本引擎。
import jdk.nashorn.api.scripting.NashornScriptEngineFactory
new NashornScriptEngineFactory()
.getScriptEngine( "-scripting" )
.eval( "" );