Библиотека 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

Есть идеи, почему это происходит или в чем причина?

0 ответов

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