直接上图上代码
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();
}
动态编译的代码会生成到源文件所在目录