如何使用ScriptEngineManager方法getEngineByName(" nashorn")添加参数?

时间:2016-09-23 09:19:00

标签: java java-8 nashorn scriptengine

我正在使用Nashorn和Java API 8.我想确保javascript执行以确保代码无法调用Java包。

有可能如下:

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");

然而,直接使用NashornScriptEngineFactory并不是很好。

好方法是使用ScriptEngineManagerNashornScriptEngineFactoryScriptEngineManager用来创建ScriptEngine实例的工厂。在documentation

中对此进行了解释
  

这个包提供了javax.script集成,即   使用Nashorn的首选方式。你通常会这样做来获得一个   Nashorn脚本引擎的实例:

import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");

我没有找到使用ScriptEngine创建ScriptEngineManager的解决方案,并且能够提供一些额外的参数,例如"-strict", "--no-java", "--no-syntax-extensions"

任何人都可以帮我解决这个问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

嗯,javax.script是用于对任何脚本语言实现的通用API。按照设计,API根本不提供“引擎配置选项”!

使用Nashorn特定API的确切问题是什么?您是否认为您使用的是特定于引擎的API?但是,您正在使用特定于引擎的选项 - 其他引擎将不支持这些选项。所以,无论如何,你都与特定的引擎实现联系在一起。

还有另一种系统属性方法来指定Nashorn选项。您可以定义系统属性“nashorn.args”。此属性是进程范围的,因此将在Java进程中创建的所有Nashorn引擎使用。

另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes