Android: Dagger 2 мешает работе 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 все еще находится в том же месте, что и раньше.

Пожалуйста, поделись своими мыслями. Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
258
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Если вы глубже изучите ошибки, вы, вероятно, найдете еще одну, в которой говорится «не удается найти класс символов DaggerXXXComponent» (или что-то подобное).

Скорее всего, у вас есть проблема, из-за которой препроцессор Dagger выходит из строя. Затем, поскольку Dagger не работает, другие генераторы кода, включая Immutables, работать не будут.

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

Вы действительно правы, сэр! Я пытался ввести частное поле. Нашли эту ошибку и исправили - Прибыль!

Bonton255 03.09.2018 10:15

Пожалуйста, рассмотрите возможность использования <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.

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