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.