maven注解处理在compile和testcompile之间共享数据

c3frrgcw  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(285)

我正在编写一个注解处理器,它执行编译时依赖注入,就像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 位置。
有什么办法吗?我也对不同的方法持开放态度,因为我不太喜欢这种方法。
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题