问题描述
使用 jdk 的 JavaCompiler 时, 遇到注释处理器问题, 不知道去哪里加载 lombok 的处理器
问题出现的环境背景及自己尝试过哪些方法
无从下手, 暂时没有尝试过其它方法
我如果把 location 的 SOURCE_PATH 去掉, lombok 的处理器是加载成功的, 只会把一个类找不到
相关代码
@Test
public void test3() throws IOException {
String classpath = "";
final List<File> classpathFiles = Arrays.stream(classpath.split(";")).map(File::new).collect(Collectors.toList());
final List<File> lombok = classpathFiles.stream().filter(classpathFile -> classpathFile.getName().contains("lombok")).collect(Collectors.toList());
List<File> sources = Arrays.asList(new File("d:/test/sanri-tools-maven/src/main/java"));
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
final StandardJavaFileManager standardFileManager = compiler.getStandardFileManager(null, null, null);
standardFileManager.setLocation(StandardLocation.SOURCE_PATH,sources);
standardFileManager.setLocation(StandardLocation.SOURCE_OUTPUT,Arrays.asList(new File("d:/test/generatejava")));
standardFileManager.setLocation(StandardLocation.CLASS_PATH,classpathFiles);
standardFileManager.setLocation(StandardLocation.ANNOTATION_PROCESSOR_PATH,lombok);
standardFileManager.setLocation(StandardLocation.CLASS_OUTPUT,Arrays.asList(new File("d:/test")));
final Iterable<? extends JavaFileObject> javaFileObjects = standardFileManager.getJavaFileObjects(new File("d:/test/sanri-tools-maven/src/main/java/com/sanri/service/xxservice.java"));
List<String> options = Arrays.asList("-encoding", "utf-8","-source","1.8");
JavaCompiler.CompilationTask task = compiler.getTask(null, standardFileManager, null, options, null, javaFileObjects);
final Boolean call = task.call();
standardFileManager.close();
assert call ;
}
你期待的结果是什么?实际看到的错误信息又是什么?
期待编译成功, 能够使用 lombok 编译
报错信息如下, 基本上是 get set 错误, 即 lombok 没有加载成功
解决了, classpath 中不能包含本身项目的包, 如果使用源码目录的话