private static boolean compiler(String encoding,String jars,String filePath, String distDir, DiagnosticCollector<JavaFileObject> diagnostics){
// 获取编译器实例
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
// 获取标准文件管理器实例
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
//编译文件
if (StringUtil.IsNullOrEmpty(filePath)) {
log.info("待编译的文件或目录不存在");
return false;
}
//输出目录
if (!FileUtil.createDictory(distDir)) {
log.info("输出目录创建失败");
return false;
}
// 得到filePath目录下的所有java源文件
File sourceFile = new File(filePath);
List<File> sourceFileList = new ArrayList<File>();
sourceFileList = getSourceFiles(sourceFile);
// 没有java文件,直接返回
if (sourceFileList.size() == 0) {
log.info(filePath + "目录下查找不到任何java文件");
return false;
}
// 获取要编译的编译单元
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(sourceFileList);
//编译选项,在编译java文件时,编译程序会自动的去寻找java文件引用的其他的java源文件或者class。 -classpath选项就是定义class文件的查找目录。
Iterable<String> options = Arrays.asList("-encoding",encoding,"-classpath",jars,"-d", distDir);
CompilationTask compilationTask = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
// 运行编译任务
boolean res= compilationTask.call();
try {
fileManager.close();
} catch (IOException e) {
log.error("关闭文件管理器失败");
log.error(e.getMessage());
}
return res;