java動態編譯class,動態載入類,執行載入類的方法,直接可執行測試
阿新 • • 發佈:2018-11-29
直接上圖上程式碼
public static void main(String[] args) { TestClass testClass=new TestClass(); try { //動態編譯程式碼 JavaCompiler javac; javac = ToolProvider.getSystemJavaCompiler(); int compilationResult = javac.run(null,null , null, "-g", "-verbose", "E:\\baoYanXiangMu\\icmcs\\web\\web-admin-ui\\src\\test\\java\\BaseEntityUtils.java"); //要載入的class檔案目錄 File file = new File("C:\\Users\\Administrator\\Desktop\\clsss"); URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class}); add.setAccessible(true); add.invoke(classloader, new Object[]{file.toURI().toURL()}); //要載入那個類 Class c = classloader.loadClass("BaseEntityUtils"); Object o = c.newInstance(); /** * parameter1 要執行的方法名稱 * parameter2 要傳遞的引數型別 */ Method m = c.getDeclaredMethod("getStringDate",Date.class); //傳引數執行 System.out.println(m.invoke(o, new Date())); }catch (Exception e){ e.printStackTrace(); }
動態編譯的程式碼會生成到原始檔所在目錄