java.util.zip.ZipException:重复条目:javax / inject / Inject.class

时间:2016-10-15 22:38:12

标签: java android android-studio dependency-injection

我见过类似的回答以下问题。对不起,我无法修复它尝试多种方式,所以我再次问它。 每当我尝试构建我的应用程序时,gradle构建会抛出以下错误,指出...由于重复输入javax / Inject类。 这只发生在我尝试将compile 'org.glassfish.jersey.containers:jersey-container-jdk-http:2.9'放入build.gradle文件中时;此包是javax.ws.rs.*服务所必需的。

我尝试在我的根目录中运行gradlew clean命令,它说构建成功但是当我再次构建我的应用程序时,它又开始抛出错误。 能否请你帮忙解决以下错误:

*Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: javax/inject/Inject.class*

以下是我的应用程序gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.usfca.studentrecordsverifycation"
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        // Enabling multidex support.
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
repositories {
    maven { url 'http://repo1.maven.org/maven2' }
    maven { url 'http://maven.restlet.com' }
    maven { url 'https://maven.java.net/content/repositories/releases/' }
    maven { url 'http://download.java.net/maven/2/' }
    maven { url 'http://download.java.net/maven/1' }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'log4j:log4j:1.2.17'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.madgag:sc-light-jdk15on:1.47.0.3'
    compile 'com.cloudinary:cloudinary-http44:1.4.5'
    compile 'org.glassfish.jersey.containers:jersey-container-jdk-http:2.9'
    compile 'commons-lang:commons-lang:2.6'
}

以下是我的Project gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2 个答案:

答案 0 :(得分:1)

好的,所以我创建了一个包含所有这些依赖项的示例项目,我得到了一个不同的错误。

因此,如果您仍然收到refreshTokens错误,那么您的lib文件夹中有一些我们不知道的jar?

这是我得到的错误:

ZipException

如果您收到类似的错误,您需要做的就是将以下内容添加到Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE

build.gradle

如果这没有任何区别,你的项目中是否有任何jar库?如果是这样,我们需要看清单。

修改

我无法确定它是否会起作用,因为我没有得到同样的错误。在您的依赖项中,请更改为:

android {
    defaultConfig {
        ...
    }

    buildTypes {
        ....
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}

答案 1 :(得分:0)

此错误表示当dexer运行时,类javax.inject.Inject被包含在apk中两次。也就是说,这个完全相同的类来自2个不同的依赖项。其中一个可能是org.glassfish.jersey.containers:jersey-container-jdk-http:2.9,因为它是在您添加之后发生的。 如果您在Android Studio上使用CMD + O(跳转到课程),您应该能够看到此课程的2个版本并查看它们的来源。确保选中允许它显示依赖项中包含的类的复选框。打开它们后,将鼠标悬停在文件选项卡上,您将看到带有工件名称的工具提示。这将是包括那个阶级的依赖。 希望它有意义。