在引入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