问题描述
我正在编写一个注释处理器,它像 Google 的 Dagger2 一样执行编译时依赖注入。这是通过生成一个带有绑定的源文件来完成的,然后沿着代码编译。
处理器在 Maven 上运行良好,但由于多个编译步骤,我遇到了问题:
-
compile
阶段开始,并按预期在target/generated-sources/annotations
中生成源文件。该文件包含对src/main/java
下所有文件的处理结果
-
testCompile
阶段开始,另一个源文件在target/generated-test-sources/test-annotations
下生成。该文件包含对src/test/java
下所有文件的处理结果
第一个文件是完美的,但我需要在 testCompile
期间生成的文件包含处理 src/main/java
和 src/test/java
下的文件的结果。为此,我提出了两种可能的解决方案:
- 以某种方式配置 Maven 以在
testCompile
期间再次编译所有源代码,以便我可以在此阶段处理所有源代码 - 在
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 (将#修改为@)