【问题标题】:Write a java file using JavaPoet in annotation processor在注解处理器中使用 JavaPoet 编写 java 文件
【发布时间】:2019-07-04 00:47:30
【问题描述】:

我正在尝试使用 processingEnv.getFiler() 创建源文件。但我没有看到任何源文件被创建。以下是我正在使用的代码:

public void javaPoetEg() {
  Filer filer = super.processingEnv.getFiler();
  MethodSpec main = MethodSpec.methodBuilder("testFiler")
    .addModifiers(Modifier.PUBLIC)
    .returns(void.class)
    .addParameter(String[].class, "args")
    .addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
    .build();

  TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
    .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
    .addMethod(main)
    .build();


  JavaFile javaFile = JavaFile.builder("com.ankit.annotation", helloWorld)
    .build();

  try{
    javaFile.writeTo(filer);
  } catch (IOException e) {
    e.printStackTrace();
  }
}

然后在Annotation处理器的重写函数process()中调用函数javaPoetEg。我在这里做错了什么?

【问题讨论】:

    标签: java annotations java-annotations javapoet


    【解决方案1】:

    我建议你看看Filer 应该如何工作。 Javadoc
    源文件的位置可能取决于您通过命令行指定的参数,或者您必须检查默认的generated 目录。

    【讨论】:

      【解决方案2】:

      这部分:javaFile.writeTo 写入 FilePrintStream。所以你可以这样做:

      File file = new File("/target/directory");
      javaFile.writeTo(file); // this will make a new File with all the data you added
      

      或者:

      javaFile.writeTo(System.out) // this will print the file representation in the console
      

      希望这会有所帮助。干杯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        相关资源
        最近更新 更多