升级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
相关产品推荐
相关产品推荐

