Android:Dagger 2 会干扰 Immutables?

Android: Dagger 2 interferes with Immutables?

遇到一个非常奇怪的问题;希望你们能帮上忙。

我在我的 android 项目中使用 Immutables library 已经很长时间了,没有任何问题。不可变对象的自动生成文件位于(作为示例)build/generated/source/apt/debug/com/package/name/ImmutableClass.java,项目编译并运行良好。

我最近决定在同一个项目中使用依赖注入并开始使用 Dagger 2。我在另一个 Java 项目(非 Android)中使用过 Guice,但之前从未使用过 Dagger。突然间,我开始收到奇怪的错误,说找不到不可变对象 class。

错误:error: cannot find symbol class ImmutableClass.

我尝试删除我创建的 @Component@Module,错误消失了。有趣的是文件 ImmutableClass.java 仍然在与之前相同的位置。

请告诉我您的想法。谢谢。

当与其他代码生成库结合使用时,Dagger 2 确实会产生奇怪的错误消息。

如果您深入研究这些错误,您可能会发现另一个错误 "cannot find symbol class DaggerXXXComponent"(或类似内容)。

您很可能遇到了导致 Dagger 预处理器失败的问题。然后,由于 Dagger 失败,其他代码生成将不会 运行,包括 Immutables。

您需要调试导致 Dagger 失败的错误,然后 Immutables 错误也会消失。

请考虑 <annotationÅrocessorPath> 用法。通过编辑引用我当前模块的 pom.xml 文件,以下方法对我有用:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.immutables</groupId>
                        <artifactId>value</artifactId>
                        <version>${dependency.version.immutables}</version>
                    </path>
                    <path>
                        <groupId>com.google.dagger</groupId>
                        <artifactId>dagger-compiler</artifactId>
                        <version>2.16</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

重要提示:路径的排序顺序无关紧要。我正在使用 maven 版本 3.6.0.