«Модуль собран с несовместимой версией Kotlin» — как я победил эту ошибку и вы тоже сможете
Вы когда-нибудь чувствовали себя как Шерлок Холмс, пытаясь понять загадочное сообщение компилятора? Если вы работаете с Kotlin, то наверняка сталкивались с этим монстром Франкенштейна: «Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.15». Тысячи разработчиков на Stack Overflow ломали головы над этой ошибкой. И я тоже.
Представьте: вы обновили зависимости, нажали «Run» и… бац! Ваш проект отказывается собираться, а в консоли красуется это сообщение. Знакомо? Давайте разберемся, почему это происходит и как заставить ваш код работать.
Почему возникает ошибка: краткий ликбез
Kotlin — язык, который активно развивается. Каждая новая версия приносит улучшения, но вместе с ними — и проблемы совместимости. Суть ошибки проста: вы используете библиотеку (модуль), которая была скомпилирована под одну версию Kotlin (в нашем случае — 1.5.1), а ваш проект ожидает другую (1.1.15). Это как если бы вы пытались вставить SIM-карту от iPhone 14 в Nokia 3310 — физически не подходит.
Ошибка incompatible version of Kotlin обычно возникает в проектах, где:
- Используется Android Studio или IntelliJ IDEA
- Управление зависимостями через Gradle
- Подключены сторонние библиотеки или модули
- Версии Kotlin плагина и Kotlin stdlib не совпадают
Давайте рассмотрим три самых эффективных способа решения проблемы. Мы будем двигаться от самого простого к самому надежному.
Способ №1: Синхронизируем версии Kotlin (самое очевидное)
Первое, что нужно сделать — проверить, что все компоненты вашего проекта используют одну и ту же версию Kotlin. Это как настроить оркестр: все инструменты должны играть в одной тональности.
Шаг 1: Проверяем версию плагина Kotlin
Откройте файл build.gradle (уровня проекта) и найдите секцию buildscript. Убедитесь, что версия плагина соответствует вашим ожиданиям:
// build.gradle (Project level)
buildscript {
ext.kotlin_version = '1.5.1' // или ваша версия
repositories {
google()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// другие зависимости
}
}
Шаг 2: Проверяем версию в модуле app
Теперь загляните в build.gradle вашего модуля (обычно app). Там тоже должна быть указана версия Kotlin:
// build.gradle (Module: app)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
// ... конфигурация Android
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
// другие зависимости
}
Шаг 3: Синхронизируем Gradle
После изменения версий обязательно нажмите Sync Now в Android Studio. Это обновит все зависимости. Если ошибка была вызвана простым рассинхроном — она исчезнет.
💡 Совет от профи: Если вы используете переменную $kotlin_version в обоих файлах, достаточно изменить её только в одном месте. Это снижает риск ошибок.
Способ №2: Чистим кэш и пересобираем проект
Иногда Gradle кэширует старые версии библиотек. Даже если вы всё исправили в конфигурации, он может упрямо тянуть старую версию. Это как старый кеш в браузере — нужно почистить.
Шаг 1: Invalidate Caches
В Android Studio или IntelliJ IDEA:
- Зайдите в
File → Invalidate Caches and Restart - Выберите опцию
Invalidate and Restart - Среда перезагрузится и очистит все кэши
Шаг 2: Чистим Gradle кэш вручную
Если первый шаг не помог, удалите папки .gradle и build вручную:
# В терминале (Linux/macOS)
rm -rf ~/.gradle/caches/
rm -rf .gradle/
rm -rf app/build/
# Windows (PowerShell)
Remove-Item -Recurse -Force $env:USERPROFILE\.gradle\caches\
Remove-Item -Recurse -Force .gradle\
Remove-Item -Recurse -Force app\build\
Шаг 3: Пересобираем проект
После очистки выполните:
./gradlew clean build
Или просто нажмите Build → Clean Project, а затем Build → Rebuild Project.
Этот метод часто решает проблему, если она связана с «застреванием» старых метаданных. Но если ошибка всё ещё с вами — переходим к следующему шагу.
Способ №3: Явно указываем версию Kotlin для каждой зависимости
Некоторые библиотеки (особенно старые) могут тянуть свою версию Kotlin. Чтобы перебить её, используйте механизм forced dependencies.
Шаг 1: Находим проблемную зависимость
Запустите Gradle с флагом --stacktrace или --info:
./gradlew assembleDebug --stacktrace
В логах вы увидите, какой именно модуль вызывает конфликт. Обычно это что-то вроде org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.1.
Шаг 2: Принудительно задаём версию
В файле build.gradle (модуля) добавьте:
// build.gradle (Module: app)
configurations.all {
resolutionStrategy {
force 'org.jetbrains.kotlin:kotlin-stdlib:1.5.1'
force 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.1'
force 'org.jetbrains.kotlin:kotlin-reflect:1.5.1'
}
}
Замените 1.5.1 на ту версию, которая ожидается вашим проектом. Если ошибка говорит «