如何使用 nashorn 在 jvm 中加载具有 class 的 java 脚本
How to load java script having class, in jvm using nashorn
这是我的简单 java 脚本 test.js 和 class :
class Car {
constructor(name, year) {
this.name = name;
this.year = year;
}
}
myCar = new Car("Ford", 2014);
Print("done")
这是我的 java 代码,它将尝试加载 test.js
public class Controller {
public static void main(String[] args) {
try {
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("--language=es6");
engine.eval(Files.newBufferedReader(Paths.get("<Path-to-test-js>/test.js"), StandardCharsets.UTF_8));
} catch (Exception _e){
System.out.println(_e);
}
}
但它抛出异常:
javax.script.ScriptException: <eval>:1:0 Expected an operand but found class
class Car {
^ in <eval> at line number 1 at column number 0
为什么这里抛出异常。
我无法使用我的脚本 运行 nashorn,我认为 class 不受支持。
如果有人计划使用 nashorn,请不要使用它:
- 我从脚本中删除了 class 并测试了它的性能,它非常慢。甚至没有接近我的应用程序的预期性能。
- 即使是出于学习目的,我也不会推荐它,因为它太绝对了。
Nashorn 是 OpenJDK 中的 JavaScript 引擎,已在 JDK 11 中被 JEP 335 弃用,最近计划在未来的 JDK 版本中被 JEP 删除372.
这是我的简单 java 脚本 test.js 和 class :
class Car {
constructor(name, year) {
this.name = name;
this.year = year;
}
}
myCar = new Car("Ford", 2014);
Print("done")
这是我的 java 代码,它将尝试加载 test.js
public class Controller {
public static void main(String[] args) {
try {
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("--language=es6");
engine.eval(Files.newBufferedReader(Paths.get("<Path-to-test-js>/test.js"), StandardCharsets.UTF_8));
} catch (Exception _e){
System.out.println(_e);
}
}
但它抛出异常:
javax.script.ScriptException: <eval>:1:0 Expected an operand but found class
class Car {
^ in <eval> at line number 1 at column number 0
为什么这里抛出异常。
我无法使用我的脚本 运行 nashorn,我认为 class 不受支持。 如果有人计划使用 nashorn,请不要使用它:
- 我从脚本中删除了 class 并测试了它的性能,它非常慢。甚至没有接近我的应用程序的预期性能。
- 即使是出于学习目的,我也不会推荐它,因为它太绝对了。 Nashorn 是 OpenJDK 中的 JavaScript 引擎,已在 JDK 11 中被 JEP 335 弃用,最近计划在未来的 JDK 版本中被 JEP 删除372.