一、核心解析类
public class Tools {
/**
* 编译java类
* @param writerPath 存放java文件的路径
*/
public void javac(String writerPath){
//java编译器
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
//文件管理器,参数1:diagnosticListener 监听器,监听编译过程中出现的错误
StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null);
//java文件转换到java对象,可以是多个文件
Iterable<? extends JavaFileObject> it = manager.getJavaFileObjects(writerPath);
//编译任务,可以编译多个文件
CompilationTask t = compiler.getTask(null, manager, null, null, null, it);
//执行任务
t.call();
try {
manager.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 加载class文件到jvm中,并调用方法
* 【提示:由于我测试动态加载类的方法的参数是内部类,所以传参取值有点看起来有点繁琐,如果是普通类型就比较容易了】
* @param packPath
*/
public void java(String packPath){
URL[] urls = null;
try {
//类路径,url的本地文件格式需要加file:/
urls = new URL[] {
new URL("file:/d:/temp/target/")};
} catch (MalformedURLException e) {
e.printStackTrace();
}