如何使用 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.