Как поделиться зависимостями, которые используют annotationProcessor, между модулями Android?

У меня есть модуль приложения Android (A) и модуль библиотеки Android (B). Оба (A) и (B) содержат эти же зависимости:

dependencies {
   implementation 'com.jakewharton:butterknife:8.8.1'
   annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

Однако в моем проекте модуль (A) зависит от модуля (B), поэтому я выполнил поиск переполнения стека о том, как я могу реализовать Don't Repeat Yourself разработать шаблон так, чтобы я включил эти зависимости только в модуль (B), и я нашел это полезным, но я не нашел, как я могу сделать эту зависимость

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1

разделены между этими двумя модулями, так как я могу это сделать?

1 ответ

В случае отдельных репозиториев

Обработчики аннотаций являются зависимостями времени сборки, но не зависимостями времени выполнения. Вы не должны заставлять всех пользователей вашей библиотеки (и пользователей их библиотек) использовать определенный процессор аннотаций. В отличие от библиотек, только потому, что вы используете ее, это не означает, что пользователи вашей библиотеки также должны ее использовать.

В некоторых редких случаях может быть целесообразно создать плагин Gradle, чтобы упростить настройку сборки для пользователей. Такой плагин может автоматически добавлять в проект как обработчик аннотаций, так и библиотеку. В любом случае, необходимость объявлять две зависимости — даже если они эффективно используются только вместе — вероятно, не оправдывает создание такого плагина.

В случае нескольких проектов в одном репозитории

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

      allprojects {
  pluginManager.withPlugin('java') {
    dependencies {
      implementation 'com.jakewharton:butterknife:8.8.1'
      annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    }
  }
}
Другие вопросы по тегам