微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。