java动态编译

来源:互联网 发布:中华名人名篇网络 编辑:程序博客网 时间:2024/05/16 09:39

有时候需要在运行时动态生成源程序,然后编译。于是写了下面这个动态编译类(参考了网上的代码)

public class CompilerUtil {public static boolean compile(String binPath, String clsName, String source) {JavaCompiler cmp = ToolProvider.getSystemJavaCompiler();StandardJavaFileManager fm = cmp.getStandardFileManager(null, null, null);JavaFileObject jfo = new StringJavaObject(clsName, source);List<String> optionsList = new ArrayList<String>();optionsList.addAll(Arrays.asList("-d", binPath));List<JavaFileObject> jfos = Arrays.asList(jfo);JavaCompiler.CompilationTask task = cmp.getTask(null, fm, null, optionsList, null, jfos);return task.call();}static class StringJavaObject extends SimpleJavaFileObject {private String content;public StringJavaObject(String fileName, String content) {super(createUri(fileName), Kind.SOURCE);this.content = content;}private static URI createUri(String name) {return URI.create("String:///" + name + Kind.SOURCE.extension);}@Overridepublic CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {return content;}}}


0 0
原创粉丝点击