动态编译的应用场景
以W3School为例,动态编译常用的场景如下:即输入代码,发送到服务器进行动态编译并返回结果
动态编译相关API
//获取系统的编译器
JavaCompiler compile = ToolProvider.getSystemJavaCompiler();
/**
* 执行编译
* @param in “standard” input; use System.in if null 标准的输入流
* @param out “standard” output; use System.out if null 标准的输出流
* @param err “standard” error; use System.err if null 标准的错误输出流
* @param arguments arguments to pass to the tool 将要编译的文件名,支持可变参数
* @Return 0表示编译成功,非0表示编译失败
**/
compile.run(in, out, err, arguments);
动态编译程序测试
下面我们通过程序来直观的体验一下:
1、首先我在E盘创建了一个Test文件夹,里面放了一个Test.java文件,文件内容如下图所示:
Test.java
2、创建好了文件接下来我们来写测试程序
package com.maple.DynamicCompile;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Demo02 {
@org.junit.Test
public void test() {
//获取编译器
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
/**
* 设置为null表示使用系统默认的输入输入与错误输出流
*/
int result = compiler.run(null, null, null, "E:/Test/Test.java");
System.out.println(result==0?"编译成功":