是否可以将 java 脚本文件导入 java ScriptEngine
Is it possible to import javascript files to a java ScriptEngine
我正在使用 nashorn java ScriptEngine。我想评估一个包含其他脚本的脚本。我知道我可以直接在 java 脚本本身中使用加载指令,但我更愿意直接从实例化脚本引擎的 java 代码导入或加载它。
有没有办法做到这一点 ?像 :
void evaluateScript(String scriptName, String dependency) {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine jsEngine = factory.getEngineByName("nashorn");
jsEngine.load(depency); // does not exist.
jsEngine.eval();
}
我看到 "load" 函数不存在。我怎样才能做到这一点?
谢谢
javax.script.ScriptEngine has many "eval" methods - there are java.io.Reader accepting eval methods like this -> eval
您可以传递 java.io.FileReader or a jdk.nashorn.api.scripting.URLReader 从文件或 URL.
加载脚本
实际上我自己找到了答案:正如评论中提到的,可以使用不同的脚本、相同的引擎调用多个 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 的脚本中使用它们。
我正在使用 nashorn java ScriptEngine。我想评估一个包含其他脚本的脚本。我知道我可以直接在 java 脚本本身中使用加载指令,但我更愿意直接从实例化脚本引擎的 java 代码导入或加载它。 有没有办法做到这一点 ?像 :
void evaluateScript(String scriptName, String dependency) {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine jsEngine = factory.getEngineByName("nashorn");
jsEngine.load(depency); // does not exist.
jsEngine.eval();
}
我看到 "load" 函数不存在。我怎样才能做到这一点?
谢谢
javax.script.ScriptEngine has many "eval" methods - there are java.io.Reader accepting eval methods like this -> eval
您可以传递 java.io.FileReader or a jdk.nashorn.api.scripting.URLReader 从文件或 URL.
加载脚本实际上我自己找到了答案:正如评论中提到的,可以使用不同的脚本、相同的引擎调用多个 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 的脚本中使用它们。