Maven annotation 处理 compile 和 testCompile 之间的共享数据

问题描述

我正在编写一个注释处理器,它像 Google 的 Dagger2 一样执行编译时依赖注入。这是通过生成一个带有绑定的源文件来完成的,然后沿着代码编译。

处理器在 Maven 上运行良好,但由于多个编译步骤,我遇到了问题:

  1. compile 阶段开始,并按预期在 target/generated-sources/annotations生成文件。该文件包含对src/main/java
  2. 下所有文件的处理结果
  3. testCompile 阶段开始,另一个文件target/generated-test-sources/test-annotations生成。该文件包含对src/test/java
  4. 下所有文件的处理结果

一个文件是完美的,但我需要在 testCompile 期间生成文件包含处理 src/main/javasrc/test/java 下的文件的结果。为此,我提出了两种可能的解决方案:

  1. 以某种方式配置 Maven 以在 testCompile 期间再次编译所有源代码,以便我可以在此阶段处理所有源代码
  2. compile 阶段,保存我的注释处理器状态,然后在 testCompile 期间恢复它以添加处理新源的结果

由于我没有找到有关解决方案 1 的任何信息,因此我通过将状态序列化到文件中来尝试使用第二个:

// Read state
FileObject state = processingEnv.getFiler().getResource(StandardLocation.soURCE_OUTPUT,"myPackage","MyStateFile");
Reader rsis = registryState.openReader(false);
// ...

// Save state
FileObject registryState = processingEnv.getFiler().createResource(StandardLocation.soURCE_OUTPUT,"MyStateFile");
Writer rsis = registryState.openWriter();
// ...

文件已正确写入,我可以在 target/generated-sources/annotations 下找到它(以及其他文件),但是我无法读取它,因为在 testCompile 期间 SOURCE_OUTPUT 位置文件夹是 target/generated-test-sources/test-annotations。问题与 CLASS_OUTPUT 位置相同。

有没有办法做到这一点?我也对不同的方法持开放态度,因为我不是这种方法的忠实粉丝。

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)