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

