由于项目中需要从字符串中编译生成对象,所以在代码中使用到了JavaCompiler来实现代码的动态加载,但是在部署至生产环境时发现
JavaCompiler jc=ToolProvider.getSystemJavaCompiler()
以上代码获取到的jc为null。
但是在开发环境中能够获取到。
经排查发现是因为生产环境默认使用jre来运行项目,而在开发环境中都是使用的jdk,jre实际上是不具备编译的功能的,只有jdk才具备编译功能。
所以在开发环境中能获取到JavaCompiler,生产环境中获取到的JavaCompiler为null。
如果希望在生产环境中使用动态加载功能那么就需要使用jdk中的java.exe来运行项目。
1.tomcat下可百度搜索关键字:tomcat指定jdk运行
2.jetty或者Undertow使用全路径的java.exe运行
本文由 范文皓 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2019-02-13 10:13:06.0