Avatar ·

Kotlin: ошибка Unresolved reference в IntelliJ IDEA — что делать?

Всем привет! Я только начал учить Kotlin и столкнулся с проблемой. Пишу простой код в IntelliJ IDEA Community Edition, но среда выдаёт ошибку "Unresolved reference: println" и "Unresolved reference: main". Вот мой код: ```kotlin fun main() { println("Hello, World!") } ``` Я создал новый проект Kotlin/JVM, поставил галочку "Gradle" и "Kotlin DSL". Файл называется Main.kt, лежит в src/main/kotlin. Но IDE подчёркивает красным и println, и main. При попытке запустить проект через зелёную стрелочку — кнопка неактивна. Gradle синхронизируется, но ошибка остаётся. Пробовал пересоздать проект, чистить кеш (File -> Invalidate Caches), переустанавливать плагин Kotlin — не помогло. Версия Kotlin в build.gradle.kts указана 1.9.0, IntelliJ IDEA обновлена до последней версии 2024.1. Что я делаю не так? Может, нужно что-то дополнительно настроить в конфигурации проекта? Буду благодарен за любую помощь! <<>>

Основная причина: неправильная настройка SDK или модуля

Ошибка "Unresolved reference" в Kotlin для базовых функций (main, println) почти всегда связана с тем, что IntelliJ IDEA не видит Kotlin runtime библиотеки. Даже если вы указали версию Kotlin в Gradle, среда может не подключить её автоматически к модулю. Вот пошаговая инструкция, как это исправить.

Шаг 1. Проверьте структуру проекта (File -> Project Structure)

  • Нажмите Ctrl+Alt+Shift+S (или Cmd+; на macOS).
  • Перейдите в раздел Project. Убедитесь, что выбран Project SDK (например, JDK 17 или 21). Если SDK не выбран — нажмите "Add SDK" и укажите путь к JDK.
  • Перейдите в Modules -> выберите ваш модуль (обычно "main"). Вкладка Dependencies должна содержать строку Kotlin Java Virtual Machine (или kotlin-stdlib). Если её нет — нажмите "+" -> "Library" -> "KotlinJavaRuntime".

Шаг 2. Пересоберите Gradle-модель

Если зависимости в Gradle правильные, но IDE их не видит:

// Откройте build.gradle.kts и убедитесь, что там есть:
plugins {
    kotlin("jvm") version "1.9.0"
}

dependencies {
    implementation(kotlin("stdlib"))
}

Затем выполните:

  • Нажмите на значок слона (Gradle) справа -> кнопка Reload All Gradle Projects.
  • Или в терминале: ./gradlew clean build --refresh-dependencies.

Шаг 3. Сбросьте кеш IDE (если не помогло)

Иногда IntelliJ застревает со старыми индексами:

File -> Invalidate Caches / Restart...
Выберите: "Invalidate and Restart"

Шаг 4. Проверьте версию плагина Kotlin

Перейдите в Settings -> Plugins. Убедитесь, что плагин Kotlin установлен и включён. Версия плагина должна совпадать с версией Kotlin в проекте (1.9.0). Если нет — обновите плагин через Marketplace.

Пример рабочего минимального проекта

Чтобы исключить проблемы, создайте новый проект без Gradle:

File -> New -> Project
Выберите: Kotlin -> JVM
НЕ ставьте галочку "Gradle" — создайте пустой проект.
Создайте файл Main.kt и напишите:
fun main() {
    println("Test")
}

Если в этом простом проекте ошибка исчезла — значит проблема именно в конфигурации Gradle. Сравните настройки.

Если ничего не помогает

Попробуйте удалить папки .idea и .gradle в корне проекта, затем открыть проект заново (File -> Open). Это полностью пересоздаст конфигурацию IDE.

После этих шагов ошибка "Unresolved reference" исчезнет. В 95% случаев проблема решается на шаге 1 или 2.

<<>>

Альтернативный подход: проверка файла build.gradle.kts и sourceSets

Если стандартные шаги не помогли, возможно, у вас неправильно настроена структура папок. Kotlin ожидает, что исходные файлы лежат в src/main/kotlin, но иногда Gradle или IDEA путают sourceSets.

Откройте build.gradle.kts и явно укажите директорию:

kotlin {
    sourceSets {
        main {
            kotlin.srcDirs("src/main/kotlin")
        }
    }
}

Затем пересинхронизируйте Gradle (Reload All Projects).

Ещё одна причина: конфликт версий Kotlin

Если у вас в проекте используется несколько модулей или библиотек, может возникнуть конфликт версий Kotlin. Проверьте, что все зависимости используют одну и ту же версию Kotlin (например, 1.9.0). В терминале выполните:

./gradlew dependencies

Посмотрите, нет ли строк вида kotlin-stdlib-1.8.0 рядом с kotlin-stdlib-1.9.0. Если есть — добавьте в build.gradle.kts:

configurations.all {
    resolutionStrategy {
        force("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")
    }
}

После этого снова перезагрузите Gradle и пересоберите проект.