Как поделиться зависимостями, которые используют 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'
}
}
}