Gradle和Android Studio重复文件从同一个jar复制

时间:2013-12-31 06:45:08

标签: java android dependencies gradle android-studio

尝试在我的Android项目中包含EasyMock时,运行测试时出现以下错误。这是两次试图打包同一个罐子。

Execution failed for task ':Example:packageDebugTest'.
> Duplicate files copied in APK META-INF/INDEX.LIST
    File 1: /home/me/.gradle/caches/modules-2/files-2.1/org.easymock/easymock/3.2/c82f7fa3ef377d8954b1db25123944b5af2ba4/easymock-3.2.jar
    File 2: /home/me/.gradle/caches/modules-2/files-2.1/org.easymock/easymock/3.2/c82f7fa3ef377d8954b1db25123944b5af2ba4/easymock-3.2.jar

我的build.gradle看起来像:

android {
...
packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/license.txt'
}
...
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    instrumentTestCompile 'junit:junit:3.8.2+'
    instrumentTestCompile('org.easymock:easymock:3.2'){
        exclude group: 'junit', module: 'junit'
    }
}

我觉得排除INDEX.LIST并不是一个好主意我想即使我这样做了,我也会为jar中的每个文件复制一次。

为什么要尝试两次添加EasyMock?我怎么能阻止它这样做?

NB - Android环境:

  • Android-Studio版本0.4.0

  • Android Gradle Plugin版本0.7.1

  • Gradle版本1.9

1 个答案:

答案 0 :(得分:0)

作为一种解决方法,我做了以下操作,这使我的测试构建

手动添加:

  • CGLIB的nodeps-2.2.2.jar
  • dexmaker-1.0.jar
  • dexmaker-DX-1.0.jar
  • EasyMock的-3.2.jar
  • 的junit-3.8.2.jar

test_libs dir,

并将以下内容添加到build.gradle:

dependencies {
...
    instrumentTestCompile fileTree(dir: 'test_libs', include: '*.jar')
...
}

一切都很好,测试运行:

我还必须执行以下操作:dexmaker-issue2来修复no dex缓存问题。