动态编译.java文件
来源:互联网 发布:java开发实战经典下载 编辑:程序博客网 时间:2024/06/10 19:07
前两天遇到一个数据计算问题,数据计算公式有时候可能会变,考虑用动态生成.java文件,然后动态去加载.class文件的方法去解决,先做一下记录,以备用时查看:
import javax.tools.JavaCompiler;import javax.tools.SimpleJavaFileObject;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;import java.net.URI;import java.util.Arrays;public class ComputeService { public boolean compile(String formulate,String packageName,String className){ if(null == formulate || "".equals(formulate)){ return false; } StringBuffer sb = new StringBuffer(); sb.append("package "); sb.append(packageName + ";"); sb.append("\n"); sb.append("public class " ); sb.append(className); sb.append("{"); sb.append("public void compute(){"); sb.append(formulate); sb.append("}}"); String classPath = Thread.currentThread().getContextClassLoader().getResource("//").getPath(); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); JavaStringFileObject fileObject = new JavaStringFileObject(className,sb.toString()); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null); JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, Arrays.asList("-d", classPath), null, Arrays.asList(fileObject)); return task.call(); } class JavaStringFileObject extends SimpleJavaFileObject{ private String javaSource; public JavaStringFileObject(String className,String javaSource){ super(URI.create(className + ".java"), Kind.SOURCE); this.javaSource = javaSource; } public CharSequence getCharContent(boolean ignoreEncodingErrors){ return javaSource; } }}
当java文件编译完成并加载后,就可以用java反射生成java对象,进行计算了。
0 0
- 动态编译.java文件
- Java 文件级动态编译
- java生成java文件并动态编译
- 动态编译加载java文件类
- 通过java 文件动态编译class
- 动态编译和运行外部java文件
- java 动态编译.java文件,然后动态加载运行
- 动态编译 Java 文件 与 动态加载 Java 类
- 用java调用编译器编译java文件-动态代理
- PHP编译动态文件
- java 内存编译-动态编译
- Java类动态加载(一)——java源文件动态编译为class文件
- 动态编译JAVA程序
- 动态编译Java程序
- 动态编译JAVA程序
- JAVA动态编译简介
- 动态编译JAVA程序
- 动态编译JAVA程序
- dfgdf
- hdu 1226 BFS + bfs记录路径
- jQuery中属性attr鼠标经过换图片且加边框与鼠标经过字体变颜色对比
- 设计模式观后(c++还原之二十四 解释器模式)
- YARN与MapReduce
- 动态编译.java文件
- #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
- 黑马程序猿——深入理解什么是反射
- APUE 线程 - 程序清单
- POJ 2828 线段树单点更新 离线搞
- OpenCV入门(三)复杂一点的变换
- CODE[VS]_1214 线段覆盖问题
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)总结
- ie6下的兼容性问题