Intereting Posts
Запуск AsyncTask рекурсивно после промежутка в 5 минут Мастер установки Android Studio не установлен Smack "Должна быть установлена ​​ошибка локального (пользовательского) JID" Ошибка Android Нет, minSdk (API 19)> deviceSdk (API 1) Android: как получить значение атрибута в коде? Отдельная строка XML для режима отладки или выпуска в манифесте android Когда использовать ShapeRenderer, Mesh + SpriteBatch, Box2D и Scene2D в Libgdx? Phonegap – сборка для android -> Класс не найден: javac1.8 Trivial: получите подтверждение по электронной почте, отправленное в android Невозможно выбрать другую учетную запись Google Analytics при создании файла конфигурации для Google Analytics Android AlarmManager: как избежать уйти от прошлых аварийных сигналов Android Double Tap Android In-App Billing: состояние покупки остается «купленным» после отмены заказа «Активность по умолчанию не найдена» для загружаемого приложения, созданного с помощью шаблона Android Studio Конфигурация запуска Android Studio для создания конфигурации ORMLite

Как правильно удалить транзитивную зависимость от maven repo с помощью gradle

При создании моего проекта возникает следующая ошибка:

UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lorg/slf4j/impl/StaticLoggerBinder; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) at com.android.dx.command.dexer.Main.run(Main.java:230) at com.android.dx.command.dexer.Main.main(Main.java:199) at com.android.dx.command.Main.main(Main.java:103) 

Насколько я понимаю, это связано с тем, что у меня есть несколько библиотек, которые зависят от slf4j. Зависимости в файле build.gradle:

 dependencies { compile project(':libraries:some-sdk') compile files('libs/some-library.jar') compile 'com.some-module:some-artifact:XXX' compile 'com.github.tony19:logback-android-classic:1.1.1-3' } 

Я знаю, что зависимость logback-android-classic является проблемой, потому что она зависит от slf4j, и если я прокомментирую, что мой проект прекрасно строится. Согласно другим источникам, я нашел, что это обычно решается путем исключения транзитивной зависимости так:

 compile('com.github.tony19:logback-android-classic:1.1.1-3') { exclude group: 'org.slf4j' 

Однако даже после очистки и восстановления я все еще получаю ошибку.

UPDATE: Выполнение зависимостейInsight ищет slf4j, поскольку dmahapatro предложил не возвращать результаты:

 $ gradle -q dependencyInsight --dependency slf4j --configuration compile No dependencies matching given input were found in configuration ':main:compile' 

Мое полное дерево зависимостей:

 +--- project :stripe +--- project :apptentive-android-sdk +--- project :numberpicker +--- project :switch-backport +--- org.jsoup:jsoup:1.7.3 +--- org.ocpsoft.prettytime:prettytime:3.2.4.Final +--- org.mockito:mockito-all:1.9.5 +--- com.google.dexmaker:dexmaker:1.0 +--- com.google.dexmaker:dexmaker-mockito:1.0 +--- com.pusher:pusher-java-client:0.3.1 \--- com.github.tony19:logback-android-classic:1.1.1-3 +--- com.github.tony19:apktool-lib:1.4.4-3 | \--- com.google.android:android:2.1_r1 | +--- commons-logging:commons-logging:1.1.1 | +--- org.apache.httpcomponents:httpclient:4.0.1 | | +--- org.apache.httpcomponents:httpcore:4.0.1 | | +--- commons-logging:commons-logging:1.1.1 | | \--- commons-codec:commons-codec:1.3 | +--- org.khronos:opengl-api:gl1.1-android-2.1_r1 | +--- xerces:xmlParserAPIs:2.6.2 | \--- xpp3:xpp3:1.1.4c \--- com.github.tony19:logback-android-core:1.1.1-3 

Обновление 2:

Я сузил конфликт до библиотеки, основанной на logback-android-classic, и локальной банке (к сожалению, я не могу отредактировать эту банку напрямую из-за проблем с лицензированием). Исключение любого из этих конфликтов разрешает конфликт, и пустой тестовый пример с только двумя этими зависимостями будет иметь конфликт. Я подтвердил, что локальная банка содержит org.slf4j, но из-за вышеупомянутых проблем с лицензированием я не могу этого сделать. Поэтому я остался с моим единственным вариантом: исключить slf4j из logback-android-classic. Учитывая, что дерево зависимостей фактически не показывает slf4j как зависимость от logback-android-classic, и учитывая, что добавление

  compile('com.github.tony19:logback-android-classic:1.1.1-3') { exclude group: 'org.slf4j' } 

Не разрешил проблему, как я могу исключить зависимость slf4j от logback-android-classic?

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

Я добавил следующее в мой «build.gradle», чтобы удалить проблему транзитивной зависимости «slf4j». Это способ исключить зависимость, которая не загружается транзитивно. И загружать конфликтующие библиотеки явно, указав это в операторах «компиляции». Думал, что это может вам помочь.

 configurations { all*.exclude group: 'ch.qos.logback' all*.exclude group: 'org.slf4j', module: 'jcl-over-slf4j' all*.exclude group: 'org.slf4j', module: 'jul-to-slf4j' all*.exclude group: 'org.slf4j', module: 'log4j-over-slf4j' all*.exclude group: 'org.slf4j', module: 'jcl-over-slf4j' all*.exclude group: 'org.slf4j', module: 'slf4j-log4j12' all*.exclude group: 'org.slf4j', module: 'slf4j-simple' } compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4j2Version compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4j2Version compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: slf4jToLog4jVersion