Возникает действительно странная проблема; надеюсь, вы, ребята, сможете помочь.
Я давно использую Библиотека неизменяемых в своем проекте 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
все еще находится в том же месте, что и раньше.
Пожалуйста, поделись своими мыслями. Спасибо.
Dagger 2 действительно может выдавать странные сообщения об ошибках в сочетании с другими библиотеками для генерации кода.
Если вы глубже изучите ошибки, вы, вероятно, найдете еще одну, в которой говорится «не удается найти класс символов DaggerXXXComponent» (или что-то подобное).
Скорее всего, у вас есть проблема, из-за которой препроцессор Dagger выходит из строя. Затем, поскольку Dagger не работает, другие генераторы кода, включая Immutables, работать не будут.
Вам нужно отладить ошибки, которые вызывают сбой Dagger, и тогда ошибки неизменяемых также исчезнут.
Пожалуйста, рассмотрите возможность использования <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.
Вы действительно правы, сэр! Я пытался ввести частное поле. Нашли эту ошибку и исправили - Прибыль!