ZipException:Kotlin 上的重复条目 类
ZipException: duplicate entry on Kotlin classes
请注意此项目在升级到 Android Studio 3.1、Gradle 构建工具 3.1.0 和 Gradle Wrapper 4.4 之前已成功编译。
异常发生在Gradle任务transformClassesAndResourcesWithPrepareIntermediateJarsForSomethingDebug:
Caused by: java.util.zip.ZipException: duplicate entry: com/me/utils/model/singleModel/NodeModel.class
请注意,异常仅发生在 Kotlin classes(如上面的 NodeModel)上。如果我删除这个 class,异常将在下一个 Kotlin class.
上发生
SO 上提到此异常的所有其他问题都以某种方式与项目依赖项中的重复第三方库相关。然而,这不是我的情况,因为 NodeModel 是我自己编写的自定义 class。它实际上只是一个简单的 Kotlin 数据 class.
该项目正在使用 Kotlin 1.2.30 版、构建工具 27.0.3、支持库 27.1.0 和 Firebase 12.0.1。
我已经尝试多次清理和重建项目,在我的本地 JDK 和嵌入式项目之间切换,但没有任何效果。
我尝试 运行 Gradle 和 --stacktrace --debug 以找出重复项的来源,但 Gradle 日志没有提及任何相关内容。
更新答案
即使使用下面提到的解决方法,我仍然偶尔会遇到异常。现在 Android Studio 3.1.1 已经发布,这个问题已经完全消失了。只需确保更新到 Gradle 构建工具的 3.1.1 版,以及至少更新到 Gradle 包装器的 4.4 版:
在gradle-wrapper.properties
中:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
在项目的build.gradle
中:
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
...
}
}
初步回答
将 Gradle Wrapper 版本增加到 4.6 为我修复了它,但只是暂时的。第二天又出现异常
到目前为止我发现的唯一可行的解决方案是将 Gradle Wrapper 降级回 4.3.1,并将 Gradle 构建工具降级到 3.0.0,直到新的稳定版本Gradle 构建工具可用。
在gradle-wrapper.properties
中:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip
在项目的build.gradle
中:
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
...
}
}
我有同样的问题,只是在修改以前编译的文件时它对我不起作用(干净的构建可以)。
将 Android Gradle 插件从 3.1.3 更改为 3.2.0-beta02 为我解决了这个问题。
解决了将 java 和 kotlin 源代码拆分到不同模块中的问题。
不要在一个模块中混用 java 和 kotlin。
它会产生一些关于重复的奇怪错误,即使我只有一个 class
请注意此项目在升级到 Android Studio 3.1、Gradle 构建工具 3.1.0 和 Gradle Wrapper 4.4 之前已成功编译。
异常发生在Gradle任务transformClassesAndResourcesWithPrepareIntermediateJarsForSomethingDebug:
Caused by: java.util.zip.ZipException: duplicate entry: com/me/utils/model/singleModel/NodeModel.class
请注意,异常仅发生在 Kotlin classes(如上面的 NodeModel)上。如果我删除这个 class,异常将在下一个 Kotlin class.
上发生SO 上提到此异常的所有其他问题都以某种方式与项目依赖项中的重复第三方库相关。然而,这不是我的情况,因为 NodeModel 是我自己编写的自定义 class。它实际上只是一个简单的 Kotlin 数据 class.
该项目正在使用 Kotlin 1.2.30 版、构建工具 27.0.3、支持库 27.1.0 和 Firebase 12.0.1。
我已经尝试多次清理和重建项目,在我的本地 JDK 和嵌入式项目之间切换,但没有任何效果。
我尝试 运行 Gradle 和 --stacktrace --debug 以找出重复项的来源,但 Gradle 日志没有提及任何相关内容。
更新答案
即使使用下面提到的解决方法,我仍然偶尔会遇到异常。现在 Android Studio 3.1.1 已经发布,这个问题已经完全消失了。只需确保更新到 Gradle 构建工具的 3.1.1 版,以及至少更新到 Gradle 包装器的 4.4 版:
在gradle-wrapper.properties
中:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
在项目的build.gradle
中:
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
...
}
}
初步回答
将 Gradle Wrapper 版本增加到 4.6 为我修复了它,但只是暂时的。第二天又出现异常
到目前为止我发现的唯一可行的解决方案是将 Gradle Wrapper 降级回 4.3.1,并将 Gradle 构建工具降级到 3.0.0,直到新的稳定版本Gradle 构建工具可用。
在gradle-wrapper.properties
中:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip
在项目的build.gradle
中:
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
...
}
}
我有同样的问题,只是在修改以前编译的文件时它对我不起作用(干净的构建可以)。 将 Android Gradle 插件从 3.1.3 更改为 3.2.0-beta02 为我解决了这个问题。
解决了将 java 和 kotlin 源代码拆分到不同模块中的问题。 不要在一个模块中混用 java 和 kotlin。 它会产生一些关于重复的奇怪错误,即使我只有一个 class