You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin多平台项目shared commonMain文件报错但可正常构建运行

问题描述

我是Kotlin、Compose及Kotlin Multiplatform的新手,正在运行compose-webview-multiplatform项目实现WebView展示功能。目前遇到的问题是:shared模块的commonMain目录下所有Kotlin文件中,@Composable、NavHost等组件均显示报错,但项目能正常构建和运行,无构建错误。

项目build.gradle.kts配置
plugins {
    kotlin("multiplatform")
    kotlin("plugin.serialization")
    id("org.jetbrains.compose")
    id("com.android.library")
    id("org.jetbrains.kotlin.plugin.atomicfu")
}

@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
kotlin {
    targetHierarchy.default()

    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "17"
            }
        }
    }

    jvm("desktop")

    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64(),
    ).forEach {
        it.binaries.framework {
            baseName = "shared"
        }
    }

    sourceSets {
        val coroutinesVersion = extra["coroutines.version"] as String
        val voyagerVersion = "1.0.0-rc10"

        val commonMain by getting {
            dependencies {
                implementation(compose.runtime)
                implementation(compose.foundation)
                implementation(compose.material)
                @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
                implementation(compose.components.resources)
                implementation("co.touchlab:kermit:2.0.3")
                implementation("cafe.adriel.voyager:voyager-navigator:$voyagerVersion")
                implementation("cafe.adriel.voyager:voyager-tab-navigator:$voyagerVersion")
                api(project(":webview"))
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
                implementation("org.jetbrains.kotlinx:atomicfu:0.23.2")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
                implementation("org.jetbrains.androidx.navigation:navigation-compose:2.7.0-alpha03")
            }
        }
        val androidMain by getting {
            dependencies {
                api("androidx.activity:activity-compose:1.8.2")
                api("androidx.appcompat:appcompat:1.6.1")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion")
            }
        }
        val desktopMain by getting {
            dependencies {
                implementation(compose.desktop.common)
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutinesVersion")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
    }
    task("testClasses")
}

android {
    namespace = "com.kevinnzou.sample"
    compileSdk = 34

    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    sourceSets["main"].res.srcDirs("src/androidMain/res")
    sourceSets["main"].resources.srcDirs("src/commonMain/resources")

    defaultConfig {
        minSdk = 21
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlin {
        jvmToolchain(17)
    }
}
相关截图说明
  • JDK位置截图:IDE中配置的JDK路径指向本地JDK 17目录
  • 报错截图:commonMain下的Kotlin文件里,@Composable注解、NavHost等Compose组件被标红提示错误
解决方法

这类问题基本是IDE索引异常或配置不一致导致的,按以下步骤逐一排查修复:

  • 清理重构+同步Gradle
    执行命令:./gradlew clean build(Windows系统用gradlew.bat clean build),完成后点击IDE右上角的「Sync Project with Gradle Files」按钮。

  • 清除IDE缓存
    打开IDE的「File -> Invalidate Caches...」,选择「Invalidate and Restart」,等待IDE重启并重新索引项目。

  • 校验JDK配置一致性
    确保IDE项目结构中配置的JDK版本(截图显示为17),与build.gradle.kts里的jvmTarget = "17"、jvmToolchain(17)完全匹配,路径或版本不符的话修正后重新同步。

  • 检查Compose依赖兼容性
    确认commonMain已正确引入compose.runtime、compose.foundation等核心依赖,同时保证Compose版本与项目使用的Kotlin版本兼容(可参考Compose Multiplatform官方文档的版本对应说明)。

  • 排查导航库冲突
    项目同时引入了Voyager和AndroidX Navigation Compose,两者在commonMain中可能引发IDE索引冲突。尝试将AndroidX Navigation Compose依赖移至androidMain目录,因为该库主要针对Android平台。

内容的提问来源于stack exchange,提问作者Megala Mani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:46:03