Gradle的冲突解决方案不适用于Android项目?

时间:2015-01-20 22:22:54

标签: android gradle android-gradle

我试图编译一个依赖树看起来像

的模块
+--- 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插件是否会抑制该功能?

1 个答案:

答案 0 :(得分:8)

经过多次挖掘后,问题似乎是我的依赖树包含hamcrest-core 1.3和hamcrest-integration 1.1,而MatcherAssert已从hamcrest-integration移至{{1这些版本之间。

所以gradle正在进行冲突解决,如记录所示;不同的模块之间只有一个冲突,我没想到。

强制所有三个hamcrest模块的1.3都解决了这个问题。