JAVA动态编译(JavaCompiler)
2013-11-14 20:18
260 查看
一、简介
在java中javax报下提供了JavaCompiler类,此类可以允许开发人员编译java文件为class文件。下面示例中是利用JavaCompiler编译文件,并利用URLClassLoader加载编译好的class文件执行其中的方法。
二、示例代码
package com.test.cp; import java.io.File; import java.io.FileWriter; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import javax.tools.JavaCompiler; import javax.tools.JavaCompiler.CompilationTask; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; public class CompilerMain { public static void main(String[] args) throws Exception { testCompiler(); } public static void testCompiler() throws Exception { String currentDir = System.getProperty("user.dir"); // 將源码写入文件中 String src = "package com.test.cp;" + "public class TestCompiler {" + " public void disply() {" + " System.out.println(\"Hello\");" + "}}"; String filename = currentDir + "/src/com/test/cp/TestCompiler.java"; File file = new File(filename); FileWriter fw = new FileWriter(file); fw.write(src); fw.flush(); fw.close(); // 使用JavaCompiler 编译java文件 JavaCompiler jc = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = jc.getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects(filename); CompilationTask cTask = jc.getTask(null, fileManager, null, null, null, fileObjects); cTask.call(); fileManager.close(); // 使用URLClassLoader加载class到内存 URL[] urls = new URL[] { new URL("file:/" + currentDir + "/src/") }; URLClassLoader cLoader = new URLClassLoader(urls); Class<?> c = cLoader.loadClass("com.test.cp.TestCompiler"); cLoader.close(); // 利用class创建实例,反射执行方法 Object obj = c.newInstance(); Method method = c.getMethod("disply"); method.invoke(obj); } }
相关文章推荐
- java compiler API实现java的动态编译
- JAVA动态编译(JavaCompiler)
- 通过JavaCompiler动态编译和运行
- Java300StudyNote(3)-Java动态编译(DynamicCompile)、动态运行、反射调用mian方法、JavaCompiler.run()空指针问题
- Java动态编译
- 使用java的JavaCompiler模拟Proxy自动编译
- Java学习之动态编译--字节码操作--javassist类库
- JAVA动态编译辅助类
- eclipse下java动态编译时com.sun.tools.javac.Main类加载问题的解决
- java编程进行动态编译加载代码分享
- Java代码的静态编译和动态编译中的问题比较(1)
- Java动态运行编译好的类两种方法
- 动态编译 Java 文件 与 动态加载 Java 类
- 动态代理---动态生成java文件并编译成class文件
- 安卓编译错误app:compileDebugJavaWithJavac>Compilation failed; see the compiler error output for details.
- Ideal 编译Java报错:Compilation failed: internal java compiler error
- JAVA 的动态编译
- Java动态编译执行
- 学习笔记——JAVA动态编译
- Java动态编译一个简单的例子(我转载的,但是经过修定,可以在Eclipse下运行)