Android: Dagger 2 вмешивается в Immutables?

Получение действительно странной проблемы; надеюсь, вы, ребята, можете помочь.

Я давно пользуюсь библиотекой Immutables в своем проекте для Android, и у меня не было проблем. Автоматически сгенерированные файлы для неизменяемых объектов расположены в (как пример) build/generated/source/apt/debug/com/package/name/ImmutableClass.java и проект компилируется и работает нормально.

Недавно я решил использовать Dependency Injection в том же проекте и начал использовать Dagger 2. Я использовал Guice в другом Java-проекте (не Android), но никогда раньше не использовал Dagger. Внезапно я начинаю получать странные ошибки, говоря, что класс Immutables не может быть найден.

Ошибка: error: cannot find symbol class ImmutableClass,

Я пытался удалить @Component а также @Module что я создал, и ошибки ушли. Самое смешное, что файл ImmutableClass.java находится там же, где и раньше.

Пожалуйста, поделись своими мыслями. Благодарю.

1 ответ

Решение

Dagger 2 действительно может выдавать странные сообщения об ошибках в сочетании с другими библиотеками кода.

Если вы углубитесь в ошибки, то, вероятно, найдете еще одну, в которой говорится, что "не удается найти класс символов 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.

Другие вопросы по тегам