ZipException: повторяющаяся запись в классах Kotlin

Обратите внимание, что этот проект успешно скомпилирован перед обновлением до 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 (как NodeModel выше). Если я удалю этот класс, исключение произойдет в следующем классе Kotlin.

Все остальные вопросы по SO, в которых упоминается это исключение, были так или иначе связаны с дублированием сторонних библиотек из-за зависимостей проекта. Однако это не мой случай, поскольку NodeModel - это пользовательский класс, который я написал сам. На самом деле это просто простой класс данных Kotlin.

В проекте используется Kotlin версии 1.2.30, инструменты сборки 27.0.3, поддержка библиотеки 27.1.0 и Firebase 12.0.1.

Я пытался очистить и пересобрать проект несколько раз, переключаясь между моим локальным JDK и встроенным, ничего не работает.

Я попытался запустить Gradle с --stacktrace --debug, чтобы выяснить, откуда исходит дубликат, но в журналах Gradle ничего не упоминалось.

2 ответа

Решение

Обновленный ответ

Даже с обходным путем, упомянутым ниже, я все еще получал случайное исключение. Теперь, когда Android Studio 3.1.1 была выпущена, проблема полностью исчезла. Просто убедитесь, что вы обновили до версии 3.1.1 инструментов сборки Gradle и, по крайней мере, до версии 4.4 оболочки Gradle:

В 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 Plugin на 3.2.0-beta02 с 3.1.3 решило это для меня.

Решите проблему с разделением исходных текстов java и kotlin на отдельные модули. Не смешивайте Java и Kotlin в одном модуле. Это создает некоторые странные ошибки о дублировании, даже у меня есть только один класс

Другие вопросы по тегам