Intereting Posts
Как проверить, что Bitmap пуст (пустой) на Android Где android.os.SystemProperties? Как получить исходное имя файла ресурса по id? Android: добавьте текстовое представление в линейную компоновку программно Как автоматически отображать активность через 5 секунд Должны ли мы использовать RecyclerView для замены ListView? Как изменить размер ImageView? Как установить приложение в папку data / app вместо папки system / app в сборке AOSP? Как обрабатывать возвращаемое значение из AsyncTask Используя ADT и менеджер SDK, присоедините исходный код Android для затмения Сделать платное приложение Android бесплатно в течение недели? Могу ли я написать приложение в javascript / HTML / CSS и продать его в магазине приложений, в Google Play и в магазине мобильных приложений для Microsoft? Отсутствует значок навигации после переключения с ICS ActionBar на панель инструментов Lollipop Как реализовать устаревшие методы уведомления Как обфускать мой проект андроида в Eclipse IDE?

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 

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