public class CompilerAPITester { private static String JAVA_SOURCE_FILE = "DynamicObject.java"; private static String JAVA_CLASS_FILE = "DynamicObject.class"; private static String JAVA_CLASS_NAME = "DynamicObject"; public static void main(String[] args) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); generateJavaClass(); try { //將產生的類文件拷貝到程序的ClassPath下面,下面這一行代碼是特定于Windows+IntelliJ IDEA 6.0項目,不具有移植性 Runtime.getRuntime().exec("cmd /c copy "+JAVA_CLASS_FILE+" classes\\production\\JDK6Features"); Iterable<? extends JavaFileObject> sourcefiles = fileManager.getJavaFileObjects(JAVA_SOURCE_FILE); compiler.getTask(null, fileManager, null, null, null, sourcefiles).call(); fileManager.close(); Class.forName(JAVA_CLASS_NAME).newInstance();//創建動態編譯得到的DynamicObject類的實例 } catch (Exception ex) { ex.printStackTrace(); } } public static void generateJavaClass(){ try { FileWriter fw = new FileWriter(JAVA_SOURCE_FILE); BufferedWriter bw = new BufferedWriter(fw); bw.write("public class "+JAVA_CLASS_NAME+"{"); bw.newLine(); bw.write("public "+JAVA_CLASS_NAME+"(){System.out.println(\"In the constructor of DynamicObject\");}}"); bw.flush(); bw.close(); } catch (IOException ex) { ex.printStackTrace(); } } } |
·Java初學者專區 | ·Java高級技術 | ||
·Java圖像與多媒體 | ·Java網絡編程 | ||
·Eclipse | ·Hibernate | ||
·Spring | ·Struts | ||
·Java設計模式 | ·EJB開發 |
原文轉自:http://www.anti-gravitydesign.com