Ожидаемый класс не имеет фактического объявления

Я делаю мультиплатформенный проект.

Часть моего файла Gradle выглядит так

...
kotlin {
    jvm()
    jvm("api")
    js()
    mingwX64("mingw")
    sourceSets {
        ...
        val jvmMain by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
            }
        }
        val jvmTest by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-test")
                implementation ("org.jetbrains.kotlin:kotlin-test-junit")
            }
        }
        val apiMain by getting {
            dependencies {
                dependsOn(jvmMain)
            }
        }
        val jsMain by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-stdlib-js")
            }
        }
        ...
    }
}

Теперь в источниках commonsMain я получаю ошибку IDE (красное подчеркивание), которая говорит, что "ожидаемый образец класса не имеет фактического объявления в apiMain", но apiMain зависит от jvmMain, который имеет фактическое объявление.

Я не думаю, что мне нужно фактическое объявление в apiMain, так как у меня уже есть в jvm.

Должен ли я использовать другой подход при настройке исходных наборов?

В любом случае проект компилируется нормально, и я могу запустить apiMain, но ошибка IDE действительно раздражает меня.

3 ответа

Решение

Это известная ошибка IDE. Посмотреть билет YouTrack здесь

В моем случае оказалось, что что-то в моей папке «.idea» было повреждено. Я закрыл Android Studio, удалил этот каталог из корня моего проекта, а затем снова открыл проект. Файл .idea был автоматически воссоздан, и моя проблема исчезла.

Я понял это, потому что при создании нового приложения KMM с помощью мастера не было той же ошибки, которую я видел с ожидаемыми/фактическими классами.

Они должны находиться под одним и тем же именем пакета.

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