在java中为nashorn启用脚本模式
我必须使用nashorn从Java执行一些bashshell命令 我有一个javascript文件:在java中为nashorn启用脚本模式,java,javascript,bash,java-8,nashorn,Java,Javascript,Bash,Java 8,Nashorn,我必须使用nashorn从Java执行一些bashshell命令 我有一个javascript文件: #!/usr/bin/jjs var testBashMethod = function(name){ $EXEC("echo Hello from bash ${name}"); }; testBashMethod("foobar"); 我让java方法将上述javascript方法加载到Nashorn引擎并执行它: public void executeScript(){
#!/usr/bin/jjs
var testBashMethod = function(name){
$EXEC("echo Hello from bash ${name}");
};
testBashMethod("foobar");
我让java方法将上述javascript方法加载到Nashorn引擎并执行它:
public void executeScript(){
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("nashorn");
engine.eval(new FileReader("script.js"));
Invocable invocable = (Invocable)engine;
invocable.invokeFunction("testBashMethod");
}
在执行上述方法时,我得到以下错误:
jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "$EXEC" is not defined
我猜我需要在java中以脚本模式加载nashorn引擎。
在终端上,我可以使用脚本模式运行引擎,然后成功执行以下操作:
jjs -scripting
jjs> $EXEC('echo Hello World..!!')
我的问题:如何以脚本模式在Java中加载nashorn引擎?因此,bash脚本方法是可用的。或者是我遗漏了什么
谢谢你的帮助
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getEngine(new String[] { "-scripting" });
有关更多文档,请参阅。我从页面中获取(并修改)了上述代码片段。您也可以通过“nashorn.args”系统属性定义nashorn选项。比如 java-Dnashorn.args=-scripting MyMainClass 将正常工作,并且您的代码可以坚持javax.script API(不需要使用jdk.nashorn.API.scripting API)。但这意味着Java进程创建的所有引擎都将启用脚本模式