Подтвердить что ты не робот

Как исключить модуль из всех зависимостей, но оставить явное объявление Gradle

Я пытаюсь решить проблему,

У меня есть некоторые зависимости, объявленные в файле build.gradle для моего приложения для Android, но проблема в том, что многие из этих зависимостей используют одну и ту же библиотеку совместимости, в моем случае appcompat-v7.
Можно исключить эту библиотеку для каждой зависимости

compile ('com.github......'){
    exclude group: 'com.android.support', module: 'appcompat-v7'
}

Но мне нужно сделать это для каждой зависимости
Другой способ - использовать такое выражение

configurations {
    compile.exclude module: 'appcompat-v7'
}

Это работает, но даже если явным образом объявляю эту библиотеку, она игнорируется compile 'com.android.support:appcompat-v7:+'

Все, что мне нужно, это включить эту библиотеку только один раз для всего приложения, потому что если компиляция без исключения будет отображаться много ошибок, например has been already defined.
Возможно, есть более простой способ заставить это работать. Я был бы признателен за любую помощь, спасибо.

4b9b3361

Ответ 1

Мы используем предоставленную конфигурацию в gradle (так что, когда мы gradle: eclipse, пакеты включаются, но не включаются при компиляции в банку, поскольку эти банки должны быть предоставлены во время выполнения). Эта конфигурация выглядит следующим образом:

configurations {
  provided {
    dependencies.all {dep ->
       configurations.default.exclude group: dep.group, module:dep.name
    }
  }
  compile.extendsFrom provided
}

Это позволяет нам включать зависимости следующим образом:

dependencies {
    compile("org.scala-lang:scala-library:2.11.7")
    compile("org.scala-lang:scala-compiler:2.11.7")
    provided("org.apache.spark:spark-core_2_11:2.0.0")
}

Попробуйте создать конфигурацию, содержащую все зависимости, в которых вы хотите исключить appcompat-v7, а затем расширить компиляцию из этой новой конфигурации.