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

动态编译的代码会生成到源文件所在目录

猜你喜欢

转载自blog.csdn.net/My_Pass_Word/article/details/84583720