You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java 9 Nashorn引擎中通过ScriptEngine启用ECMAScript 6支持?

在Java 9的ScriptEngine中启用ES6支持

我之前也碰到过这个问题——Java 9确实宣称Nashorn引擎支持ECMAScript 6,但默认通过ScriptEngine创建的实例并不会启用ES6特性,和jjs命令行里需要加--language=es6参数一样,我们得在代码里给Nashorn传递对应的启动参数才行。

具体实现步骤

  1. 先筛选出Nashorn的ScriptEngineFactory(避免和其他脚本引擎混淆)
  2. 创建引擎时,通过参数映射传入nashorn.args配置,值为--language=es6

完整代码示例

import javax.script.*;
import java.util.List;
import java.util.HashMap;

public class ES6ScriptEngineDemo {
    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager engineManager = new ScriptEngineManager();
        List<ScriptEngineFactory> allFactories = engineManager.getEngineFactories();

        // 定位Nashorn引擎工厂
        ScriptEngineFactory nashornFactory = null;
        for (ScriptEngineFactory factory : allFactories) {
            if ("Oracle Nashorn".equals(factory.getEngineName())) {
                nashornFactory = factory;
                break;
            }
        }

        if (nashornFactory != null) {
            // 设置ES6启用参数
            HashMap<String, String> engineParams = new HashMap<>();
            engineParams.put("nashorn.args", "--language=es6");

            // 创建支持ES6的ScriptEngine实例
            ScriptEngine es6Engine = nashornFactory.getScriptEngine(engineParams);

            // 测试ES6特性(比如箭头函数、模板字符串)
            String testES6Code = """
                const greet = name => `Hello, ${name}!`;
                print(greet("ES6"));
                """;
            es6Engine.eval(testES6Code);
        } else {
            System.out.println("Nashorn引擎未找到,请确认使用的是Java 9/10版本");
        }
    }
}

关键说明

  • 直接用engineManager.getEngineByName("nashorn")创建的引擎默认不开启ES6,运行ES6语法会抛出语法异常,这也是你测试时出错的原因。
  • nashorn.args参数的作用就是给Nashorn引擎传递启动参数,和jjs --language=es6命令行参数的效果完全一致。
  • 注意:这个方案仅适用于Java 9和Java 10,Java 11及以后版本已经移除了Nashorn引擎,需要使用其他第三方脚本引擎(比如GraalVM JavaScript)来支持ES6+。

内容的提问来源于stack exchange,提问作者TheZeus121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:25:21