Java动态编译
来源:互联网 发布:晋江网店美工培训 编辑:程序博客网 时间:2024/05/21 07:34
import javax.tools.*;import java.io.IOException;import java.lang.reflect.Method;import java.net.URI;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 慎用动态编译 */public class JavaCompilerClient{ public static void main(String[] args) throws Exception { //Java源代码 String sourceStr = "public class Hello{public String sayHello(String name){return \"Hello,\" + name + \"!\";}}"; //类名及文件名 String clsName = "Hello"; //方法名 String methodName = "sayHello"; //当前编译器 JavaCompiler cmp = ToolProvider.getSystemJavaCompiler(); //Java标准文件管理器 StandardJavaFileManager fm = cmp.getStandardFileManager(null, null, null); //Java文件对象 JavaFileObject jfo = new StringJFO(clsName, sourceStr); //编译参数,类似与javac <options>中的options List<String> optionsList = new ArrayList<String>(); //编译文件的存放地方,注意:此处是为Eclipse工具特设的 optionsList.addAll(Arrays.asList("-d", "./bin")); //要编译的单元 List<JavaFileObject> jfos = Arrays.asList(jfo); //设置编译环境 JavaCompiler.CompilationTask task = cmp.getTask(null, fm, null, optionsList, null, jfos); //编译成功 if (task.call()) { //生成对象 Object obj = Class.forName(clsName).newInstance(); Class<? extends Object> cls = obj.getClass(); //调用sayHello方法 Method m = cls.getMethod(methodName, String.class); String str = (String) m.invoke(obj, "Dynamic Compilation"); System.out.println(str); } }}//文本中的Java对象class StringJFO extends SimpleJavaFileObject{ //源代码 private String content = ""; //遵循Java规范的类名及文件 public StringJFO(String _javaFileName, String _content) { super(_createStringJavaObjectUri(_javaFileName), Kind.SOURCE); content = _content; } //产生一个uri资源路径 private static URI _createStringJavaObjectUri(String name) { //注意此处没有设置包名 return URI.create("String:///" + name + Kind.SOURCE.extension); } //文本文件代码 @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { return content; }}
0 0
- java 内存编译-动态编译
- 动态编译JAVA程序
- 动态编译Java程序
- 动态编译JAVA程序
- JAVA动态编译简介
- 动态编译JAVA程序
- 动态编译JAVA程序
- Java动态编译
- Java的动态编译
- Java动态编译
- JAVA 的动态编译
- Java动态编译
- Java动态编译
- JAVA动态编译
- java动态编译
- Java动态编译笔记
- Java动态编译(一)
- 动态编译Java源文件
- 深入理解java异常处理机制
- C语言版二分查找算法
- IRP_MJ_INTERNAL_DEVICE_CONTROL
- android开源项目和框架
- hdu1233还是畅通工程
- Java动态编译
- Insertion Sort List 【leetcode】
- LeetCode - Count and Say
- 全排列 DFS 函数模板
- fat-jar的使用
- Android之Adapter用法总结
- Codeforces Round #265 (Div. 2) C. No to Palindromes!
- SessionManagementFilter分析--上
- 静态导入