如何使用nashorn在jvm中加载具有类的java脚本

问题描述

这是我带有类的简单Java脚本test.js:

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,我认为不支持类。 如果有人打算使用 nashorn,请不要使用它:

  • 我从脚本中删除了类并测试了它的性能,它非常慢。甚至还没有接近我的应用程序的预期性能。
  • 即使出于学习目的,我也不会推荐它,因为它变得绝对。 Nashorn 是 OpenJDK 中的 JavaScript 引擎,它已在 JDK 11 中被 JEP 335 弃用,最近计划在 JEP 372 的未来 JDK 版本中移除。