我试图编译一个依赖树看起来像
的模块+--- com.squareup.burst:burst-junit4:1.0.2
| +--- com.squareup.burst:burst:1.0.2
| \--- junit:junit:4.11 -> 4.12
| \--- org.hamcrest:hamcrest-core:1.3
+--- com.android.support.test.espresso:espresso-core:2.0
| +--- com.squareup:javawriter:2.1.1
| +--- org.hamcrest:hamcrest-integration:1.1
| | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
| +--- org.hamcrest:hamcrest-library:1.1
| | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
| +--- com.android.support.test.espresso:espresso-idling-resource:2.0
| +--- com.android.support.test:testing-support-lib:0.1
| | \--- junit:junit-dep:4.10
| | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
| +--- com.google.code.findbugs:jsr305:2.0.1
| +--- javax.annotation:javax.annotation-api:1.2
| \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
...
正如您所看到的那样hamcrest-core
版本存在冲突,但gradle似乎会识别冲突并应用其默认的"最新版本"战略,这正是我想要的。
然而,当尝试运行assembleDebugTest
时(手动或通过Android Studio)我得到了
com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/MatcherAssert;
类似问题的一些答案显示exclude
不需要的罐子,但我遇到了一堆类似的冲突,而且它有点失控。
为什么没有自动删除旧jar的默认冲突策略? android gradle插件是否会抑制该功能?
答案 0 :(得分:8)
经过多次挖掘后,问题似乎是我的依赖树包含hamcrest-core
1.3和hamcrest-integration
1.1,而MatcherAssert
已从hamcrest-integration
移至{{1这些版本之间。
所以gradle正在进行冲突解决,如记录所示;不同的模块之间只有一个冲突,我没想到。
强制所有三个hamcrest模块的1.3都解决了这个问题。