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

升级Lambda函数至Java17后ScriptEngine获取为null求助

解决Java17 Lambda中Nashorn ScriptEngine获取为null的问题

问题根源

Java17已正式移除内置的Nashorn引擎,即便引入org.openjdk.nashorn:nashorn-core依赖,ScriptEngineManager通过名称"JavaScript"查找引擎时,也可能无法自动发现Nashorn的引擎工厂——这是因为独立依赖的Nashorn SPI注册逻辑无法被默认的ServiceLoader自动识别。

解决方案

1. 直接实例化Nashorn引擎工厂

放弃通过名称查找的方式,直接创建Nashorn引擎工厂实例来获取ScriptEngine,这是最可靠的解决办法:

import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory;

// 替换原有的ScriptEngine获取代码
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();

2. 确认Gradle依赖已打包进Lambda部署包

Lambda运行时需要依赖包存在于部署包内,检查你的Gradle配置(比如使用shadowJar插件或自定义zip任务),确保nashorn-core依赖被一同打包,避免部署时出现依赖缺失。

3. 模块化项目额外配置

如果你的Lambda项目使用Java模块系统,需要在module-info.java中声明对Nashorn模块的依赖:

requires org.openjdk.nashorn.core;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:23:18