1. 程式人生 > >java動態編譯class,動態載入類,執行載入類的方法,直接可執行測試

java動態編譯class,動態載入類,執行載入類的方法,直接可執行測試

直接上圖上程式碼

 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();
        }

 

動態編譯的程式碼會生成到原始檔所在目錄