/***
* 根据 java文件的路径,动态编译加载对应的类。
* @param javaPath
* @return Class
*/
public static Class dynComplieLoadClass(String filePath, String className) {
//第二个参数是编译生成class文件的目录。每二个参数是.java的完全路径。
String[] arguments = new String[] { "-d", System.getProperty("user.dir"),
filePath+ File.separator + className+ ".java" };
// Compile
int result = com.sun.tools.javac.Main.compile(arguments);
if (result == 0) {
URL classpath = null;
try {
//设置classPath 为 生成class文件的目录
classpath = new URL("file:/" + System.getProperty("user.dir") + "/");
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
//这句话是把生成class文件的目录加到classPath中。
URLClassLoader classLoader = new URLClassLoader(new URL[] { classpath });
// Load
try {
//若编译的文件有包名load时加上包名。
Class testClass = classLoader.loadClass("cn.test.co." + className);
return testClass;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.err.println("编译没通过!");
}
return null;
}