簡體   English   中英

如何使用gradle從maven repo中正確刪除傳遞依賴項

[英]How to correctly remove a transitive dependency from a maven repo with 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:X.X.X'
    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'

然而,即使在我清理和重建之后,我仍然會收到錯誤。

更新:運行dependencyInsight尋找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庫和本地jar(遺憾的是,由於許可問題,我無法直接編輯此jar)。 排除其中任何一個解決沖突,以及只有這兩個依賴項的空通用測試應用程序將產生沖突。 我已經驗證了本地jar包含org.slf4j,但由於上述許可問題,我對此無能為力。 所以我留下了我唯一的選擇是從logback-android-classic中排除slf4j。 鑒於依賴樹實際上並沒有將slf4j顯示為logback-android-classic的依賴關系,並且給出了添加

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

還沒有解決問題,如何從logback-android-classic中排除slf4j依賴?

最終更新:最終通過與我正在使用的本地jar的所有者合作來解決這個問題。 我懷疑這對未來的訪問者來說是一個特別有用的答案,但是為了完成它想要包含它。

我在“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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM