Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中为nashorn启用脚本模式_Java_Javascript_Bash_Java 8_Nashorn - Fatal编程技术网

在java中为nashorn启用脚本模式

在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(){

我必须使用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(){

    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进程创建的所有引擎都将启用脚本模式