new ScriptEngineManager().getEngineByName()返回null

博客讲述了在生产环境中遇到的问题,即JavaScript引擎在本地开发环境正常工作,但在Docker容器中报空指针异常。经过排查,发现是由于使用的Docker镜像缺少必要的JRE组件nashorn.jar。通过更换Docker镜像或直接使用Java jar启动解决了问题。提醒读者注意Docker镜像的完整性和与生产环境的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在引入js引擎时,本地开发环境可以返回值,但是上了生产,就一直报空指针异常,原因是
new ScriptEngineManager().getEngineByName(“javascript”)返回了null

在这里插入图片描述
于是打印日志

  ScriptEngineManager manager = new ScriptEngineManager();


            List<ScriptEngineFactory> factories = manager.getEngineFactories();


             for (ScriptEngineFactory factory: factories) {
                 System.out.printf("Name: %s%n" + factory.getEngineName(),
                         "Version: %s%n" + factory.getEngineName(),
                         "Language name: %s%n" + factory.getLanguageName(),
                         "Language version: %s%n" + factory.getLanguageVersion(),
                         "Extensions: %s%n" + factory.getExtensions(),
                         "Mime types: %s%n" + factory.getMimeTypes(),
                         "Names: %s%n", factory.getNames());
             }
            System.out.println("kangfactories"+factories);
             System.out.println("kangcalculateUtils"+calculateUtils);
            System.out.println("kangscriptEngine"+calculateUtils.scriptEngine);
            System.out.println("kangformula"+formula);

发现脚本引擎数组返回都是null。

百度或者google这样的问题,一般是jdk版本是1.6导致的,但是我生产环境是1.8。
中间有怀疑1.8的小版本不够,有过升级,还是不行在这里插入图片描述
琢磨很久,久思不通,突然想到我的生产服务是放在docker中运行,docker容器和宿主机器是隔开的,
jdk也是从docker hub上拉的镜像

然后执行命令find / -name jdk

但是这些jdk有jar包nashorn.jar缺没几个,说明我docker拉的镜像有问题 find / -name nashorn.jar
在这里插入图片描述
最后换了镜像或者直接java -jar起都可以成功了

下面是我Dockerfile拉的有问题的jre ,请避坑 :
anapsix/alpine-java:8_server-jre_unlimited
M

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值