我有一个自定义注释处理器,它创建了几个类。在eclipse构建中可以正常工作,它会在“ .apt_generation”文件夹下生成具有完整包结构的Java文件。
String implName = "foo/bar/impl/" + annotatedElement.getSimpleName() + "Impl";
JavaFileObject jfo = filer.createSourceFile(implName, annotatedElement);
Writer writer = jfo.openWriter();
writer.write("package foo.bar.impl;\n\n");
writer.write("public class CustomImpl {}\n");
writer.close();
但是,这不适用于gradle build。使用Gradle进行构建时遇到错误。
Illegal name foo/bar/impl/CustomImpl
javax.annotation.processing.FilerException:
Illegal name foo/bar/impl/CustomImpl
at com.sun.tools.javac.processing.JavacFiler.checkName(JavacFiler.java:495)
at com.sun.tools.javac.processing.JavacFiler.checkNameAndExistence(JavacFiler.java:517)
at com.sun.tools.javac.processing.JavacFiler.createSourceOrClassFile(JavacFiler.java:396)
at com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:378)
有趣的是,如果我们从文件名中删除包路径,那么Gradle构建就可以了。但是在不考虑包结构的情况下在一个文件夹中创建所有文件。
有任何想法为什么Gradle构建会如此?