Intereting Posts
Android Plugin UnitySendMessage Никогда не звонил Как отключить установленную версию сервисов Google Play на моем устройстве Android? Есть ли какой-нибудь идентификатор AdMob? Предотвращение кэширования данных Android WebView MultiDexApplication не распознается 60 / 120fps данные предварительного просмотра на устройстве Android? Всегда получать состояние сеанса: CLOSED_LOGIN_FAILED, токен: {токен AccessToken: ACCESS_TOKEN_REMOVED в facebook android sdk3.0. Удалить разрыв строки в TabLayout Лучший способ создать выпадающее меню в android 2.x, как в ICS Ошибка: тегу <item> требуется атрибут «drawable» или дочерний тег, определяющий возможность рисования Поддержка пользовательских Multi Language Как изменить размер растрового изображения эффективно и без потери качества в андроиде Как возможно, что приложение Google Fit измеряет количество шагов все время без отвода батареи? Что-то не так в радиусе Corner Android RecyclerView ItemTouchHelper – пользовательский вид

Gradle не будет исключать модуль по запросу

Я не могу исключить модуль guava в файле build.gradle, используя «исключить».

С этим блоком зависимостей:

dependencies { ... compile(group: 'com.google.api-client', name: 'google-api-client', version: '1.19.0') { exclude(group: 'com.google.guava', module: 'guava-jdk5') // !!! Doesn't work!!! ... } ... } 

Я получаю дерево зависимостей ниже. Обратите внимание, что guava-jdk5 не исключается.

 +--- com.google.api-client:google-api-client:1.19.0 | +--- com.google.oauth-client:google-oauth-client:1.19.0 | | +--- com.google.http-client:google-http-client:1.19.0 | | | ... | | \--- com.google.code.findbugs:jsr305:1.3.9 | ... | \--- com.google.guava:guava-jdk5:13.0 

Обратите внимание, что последняя строка по-прежнему включает модуль guava, он не был исключен. Зачем? Как его исключить?

Solutions Collecting From Web of "Gradle не будет исключать модуль по запросу"

Проблема заключалась в том, что другой объект компиляции также зависел от зависимости первого уровня, которая имела guava-jdk5 как транзитивную зависимость, поэтому этот другой объект приводил к нежелательному модулю.

Я смог наконец увидеть это, используя

 ./gradlew -q :app:dependencyInsight --dependency guava --configuration compile 

И может исключить его, используя

 configurations { compile.exclude module: 'guava-jdk5' } 

Ответ автора вопроса мне не помог, потому что он слишком узкий / конкретный. Это модифицированный подход, который работает для исключения любого модуля:

  1. Проверьте обнаруженные в настоящее время зависимости с помощью этой команды в терминале:

     gradlew app:dependencies 

Команда выдается из корня вашего проекта, а «приложение» здесь должно быть заменено именем «модуля» вашего приложения.

Вы также можете войти в папку приложения и запустить это:

 ..\gradlew -q dependencies 

Примечание. Используйте ../gradle в Linux.

Вы увидите, что существует несколько конфигураций, а не только «компиляция» (например, «_debugCompile» и т. Д.). Каждая «конфигурация» имеет свои собственные зависимости! Вот почему, например, исключить что-либо в конфигурации «компиляции» может быть недостаточно.

  1. Теперь примените исключение ко всем «конфигурациям» следующим образом: Добавьте этот блок в файл gradle.build вашего приложения («module») (с вашим списком модулей, чтобы исключить, конечно :-)):

     configurations { all { exclude module: 'httpclient' exclude module: 'httpcore' } } 
  2. Повторите шаги 1 и 2. до тех пор, пока вы не увидите модули, которые вы хотите исключить, в список зависимостей любой конфигурации.

Совет. Здесь, внутри «всего» блока, вы можете решить поставить:

 transitive = false 

И вы избавитесь от всех транзитивных зависимостей.