动态编译不能获取编译器JavaCompiler

/ 0 条评论 / 681人阅读

由于项目中需要从字符串中编译生成对象,所以在代码中使用到了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运行

Responses /