是否可以将javascript文件导入java ScriptEngine

时间:2017-07-15 09:47:05

标签: javascript java nashorn

我使用的是nashorn java ScriptEngine。我想评估一个包含其他脚本的脚本。我知道我可以直接在javascript本身使用load指令,但我更喜欢直接从实现scriptEngine的java代码导入或加载它。 有没有办法做到这一点 ?类似的东西:

void evaluateScript(String scriptName, String dependency) {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine jsEngine = factory.getEngineByName("nashorn");
    jsEngine.load(depency); // does not exist.
    jsEngine.eval();
}

我看到“加载”功能不存在。我怎么能做到这一点?

由于

2 个答案:

答案 0 :(得分:2)

实际上我自己找到了答案:正如评论中所提到的,可以使用不同的脚本,相同的引擎调用几个eval,引擎会将评估的脚本保留在其上下文中。所以这是我的代码:

public void executeScript(String scriptName, String[] dependencies) {
    try {
        FileReader script = new FileReader(scriptName);
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine jsEngine = factory.getEngineByName("nashorn");

        if(dependencies != null) {
            for (String dependency : dependencies) {
                FileReader dependencyFile = new FileReader(dependency);
                jsEngine.eval(dependencyFile);
            }
        }

        jsEngine.eval(script);
    }
}

我可以在依赖项中定义函数,并在名称scriptName的脚本中使用它们。

答案 1 :(得分:0)

javax.script.ScriptEngine有很多“ eval ”方法 - 有java.io.Reader接受 eval 这样的方法 - > eval

您可以传递java.io.FileReaderjdk.nashorn.api.scripting.URLReader来从文件或网址加载脚本。