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

如何在Java中解析包含class关键字的JavaScript代码?

解决方案

问题原因

你遇到的报错是因为使用的Rhino和JDK内置的Nashorn引擎默认不支持ES6及更高版本的JavaScript语法,class关键字是ES2015(ES6)才正式加入的特性,旧版本引擎会将其识别为保留字禁止使用。

可选解决方案

方案1:配置新版Rhino开启ES6支持

新版Rhino已经支持ES6语法,你只需要升级Rhino依赖,再手动配置脚本上下文的语言版本即可:
首先引入最新版Rhino的Maven依赖:

<dependency>
    <groupId>org.mozilla</groupId>
    <artifactId>rhino</artifactId>
    <version>1.7.14</version> <!-- 可替换为最新正式版 -->
</dependency>
<dependency>
    <groupId>org.mozilla</groupId>
    <artifactId>rhino-engine</artifactId>
    <version>1.7.14</version>
</dependency>

修改Java代码指定ES6版本:

public static void main(String[] args) throws Throwable {
    RhinoScriptEngineFactory factory = new RhinoScriptEngineFactory();
    RhinoScriptEngine engine = (RhinoScriptEngine) factory.getScriptEngine();
    // 配置上下文开启ES6支持
    Context cx = Context.enter();
    cx.setLanguageVersion(Context.VERSION_ES6);
    try {
        engine.eval(new FileReader("js/SomeClass.js"));
    } finally {
        Context.exit();
    }
}

方案2:使用GraalVM Polyglot API(推荐)

GraalVM的JS引擎是Oracle官方用来替代Nashorn的方案,对ES最新特性支持最完善,性能也优于老旧的Rhino和Nashorn。
首先引入GraalVM JS的依赖:

<dependency>
    <groupId>org.graalvm.js</groupId>
    <artifactId>js</artifactId>
    <version>23.1.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.graalvm.js</groupId>
    <artifactId>js-scriptengine</artifactId>
    <version>23.1.0</version>
</dependency>

执行代码示例:

public static void main(String[] args) throws Throwable {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
    engine.eval(new FileReader("js/SomeClass.js"));
    // 测试调用JS方法
    Invocable invocable = (Invocable) engine;
    invocable.invokeFunction("start");
}

方案3:转译ES6代码为ES5

如果你无法更换引擎,可以提前用Babel把包含class在内的ES6+语法转译为ES5兼容代码,再交给旧引擎执行,该方案需要额外配置转译流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:02