使用easy-captcha验证码出现javax. script ScriptEngine.eval(String)" because "engine" is nul
1. 问题
java项目使用 ArithmeticCaptcha 验证码,出现 javax. script ScriptEngine.eval(String)" because "engine" is nul
ArithmeticCaptcha captcha = new ArithmeticCaptcha(111, 36);
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
2. 问题分析
Jdk8中内置的JavaScript引擎 nashorn
被移除,导致验证码使用报错Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null
项目中使用了 com.github.whvcse包的easy-captcha
验证码依赖,升级至Jdk17后,验证码接口报错:Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null
,
错误原因很明显脚本引擎执行脚本语句报错,因为执行引擎为空。
查询相关资料Jdk8自带的JavaScript引擎 nashorn
再升级到Jdk9后就被移除了,从而导致报错
3. 解决方法
在pom文件添加JavaScript引擎 nashorn
依赖,重新启动项目即可
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
</dependency>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了