【发布时间】:2020-02-07 04:26:40
【问题描述】:
我有我的注释处理器:
public class MyAnnotationProcessor extends AbstractProcessor {
...
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
// Here I deal with the annotated element
...
// use JavaPoet to generate Java source file
TypeSpec generatedClazz = generate_code();
JavaFile javaFile = JavaFile.builder("com.my.foo", generatedClazz).build();
javaFile.writeTo(filer);
}
}
处理上述process回调中的注释元素后,我使用JavaPoet生成Java源代码并为代码创建Java文件。构建我的项目时,除了生成的 java 源代码文件默认转到 build/generated/sources/myApp/com/my/foo 之外,一切正常。如何使生成的 Java 文件位于项目的源代码位置 src/main/java/com/my/foo 中?
我的 gradle 构建:
plugins {
id 'java'
}
group 'com.my.app'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testImplementation 'junit:junit:4.12'
implementation 'com.squareup:javapoet:1.11.1'
implementation 'com.google.guava:guava:28.1-jre'
}
【问题讨论】:
-
您能否说明您为什么要这样做,或者您想要达到什么目的?除非我记错了,否则注释处理器将出错,它试图创建的类已经存在于正常源中,因此运行你要求的一次将起作用,之后每次都会导致错误。另外:添加有关您如何构建的详细信息(gradle、maven 等),以便做出有助于您设置的答案。
-
我想在注释处理器中为我的源文件夹生成代码。我在我的 Intellj IDE 中构建它。
-
如果您可以进一步解释原因,我可以尝试帮助回答,否则我只能说这是不可能或不合理的。请记住,在 IntelliJ 中,即使它构建到 build/generated/ 目录,您仍然可以查看该代码。您希望之后编辑生成的代码吗?将其提交给版本控制?其他生成的代码是否基于它?等
-
我只是想知道是否可以使用JavaPoet在
src/目录下而不是build/目录下生成代码。这就是我提出问题的动机,没有其他原因,这是我的好奇心。我想知道这是否可能。是的,我想在之后编辑生成的代码,可以吗?如果不可能,这也是我的问题的答案。我用 gradle build 更新了我的问题。我不知道我该如何进一步解释。 -
简短回答:是的,JavaPoet 可以,但不,注解处理器不行。稍后我会写一些更长的东西,但简而言之,您只需在不同的编写器上或直接在文件上调用 writeTo() 以使其在您的源目录中工作。
标签: annotation-processing javapoet annotation-processor