Библиотека Immutables генерирует один и тот же неизменный класс дважды
При использовании процессора аннотаций http://immutables.github.io/ в многомодульном приложении для Android сборка завершается неудачно, когда package-info.java
файл используется.
Мне удалось создать минимальный тест-проект на GitHub, чтобы воспроизвести проблему: https://github.com/tmtron/ImmutablesPackageInfoIssue
Проект состоит из 2 модулей:
- приложение: приложение для Android:
@Value.Immutable
используется вAndroidIm.java
- lib: модуль java:
@Value.Immutable
используется вJavaIm.java
Так что, в принципе, использование http://immutables.github.io/ в обоих модулях работает нормально.
Но когда мы добавим package-info.java
файл (в com.example package
в app
модуль), компиляция завершается с этой ошибкой:
com.android.build.api.transform.TransformException:
com.android.dex.DexException: Multiple dex files define Lcom/example/ImmutableJavaIm$1;
Ошибка Dex происходит, потому что ImmutableJavaIm.java
генерируется дважды:
- однажды в проекте lib (ожидается):
\build\generated\source\apt\main\com\example\ImmutableJavaIm.java
- И ТАКЖЕ в проекте приложения (не должно происходить):
\build\generated\source\apt\debug\com\example\ImmutableJavaIm.java
Известные обходные пути:
- удалить
package-info.java
файл - очистить / закомментировать его содержимое
- настроить сборку, чтобы игнорировать
package-info.java
файл
Примечание: я не могу просто проигнорировать файл, потому что он содержит важные аннотации для сборки: например, конфигурация в стиле immutables
Есть идеи, почему это происходит или в чем причина?