Как исключить модуль из всех зависимостей, но оставить явное объявление 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
.
Возможно, есть более простой способ заставить это работать. Я был бы признателен за любую помощь, спасибо.
Ответы
Ответ 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, а затем расширить компиляцию из этой новой конфигурации.