我正在编写一个注解处理器,它执行编译时依赖注入,就像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, "myPackage", "MyStateFile");
Writer rsis = registryState.openWriter();
// ...
文件写得正确,我可以在下面找到它 target/generated-sources/annotations
(与另一个文件一起),但我无法读取,因为在 testCompile
这个 SOURCE_OUTPUT
文件夹位置为 target/generated-test-sources/test-annotations
. 这个问题对我来说是一样的 CLASS_OUTPUT
位置。
有什么办法吗?我也对不同的方法持开放态度,因为我不太喜欢这种方法。
提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!