Compose Multiplatform项目navigation-compose依赖同步失败求助
Compose Multiplatform桌面应用导航依赖问题
问题概述
我正在使用Compose Multiplatform构建桌面应用,需要实现导航功能。按照官方指南添加androidx.navigation:navigation-compose依赖后,Gradle同步失败;尝试降级到旧版本2.6.0虽能同步,但无法导入核心API(rememberNavController、NavHost)。
现有配置
/gradle/libs.versions.toml
[versions] compose = "1.6.2" compose-plugin = "1.6.0" junit = "4.13.2" kotlin = "1.9.22" kotlin-serialization-json = "1.6.3" ktor = "2.3.10" coroutines = "1.8.0" nav = "2.6.0" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } kotlin-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization-json" } junit = { group = "junit", name = "junit", version.ref = "junit" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } compose-nav = { module = "androidx.navigation:navigation-compose", version.ref = "nav" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor-client-engine = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" } ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } [plugins] jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
/composeApp/build.gradle.kts
import org.jetbrains.compose.desktop.application.dsl.TargetFormat plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinSerialization) alias(libs.plugins.jetbrainsCompose) } kotlin { jvm("desktop") sourceSets { val desktopMain by getting commonMain.dependencies { implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material) implementation(compose.ui) implementation(compose.components.resources) implementation(compose.components.uiToolingPreview) // implementation(kotlin.serialization.json) implementation(libs.ktor.client.core) implementation(libs.ktor.client.engine) implementation(libs.ktor.client.content.negotiation) implementation(libs.ktor.serialization.kotlinx.json) implementation(libs.kotlinx.coroutines.core) implementation(libs.compose.nav) } desktopMain.dependencies { implementation(compose.desktop.currentOs) } } } compose.desktop { application { mainClass = "MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) packageName = "com.myproject" packageVersion = "1.0.0" } } }
同步错误信息
:composeApp:commonMain: Could not resolve androidx.compose.animation:animation:1.5.1. Required by: project :composeApp > androidx.navigation:navigation-compose:2.7.7 Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html :composeApp:commonMain: Could not resolve androidx.compose.runtime:runtime:1.5.1. Required by: project :composeApp > androidx.navigation:navigation-compose:2.7.7 Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
尝试过的操作
- 将
navigation-compose版本降级到2.6.0,Gradle同步可通过,但无法导入rememberNavController和NavHost。
解决方案
1. 调整依赖放置位置
androidx.navigation:navigation-compose是AndroidX专属库,仅支持JVM(桌面/Android)平台,不能放在commonMain源集。修改composeApp/build.gradle.kts,将依赖移到desktopMain:
sourceSets { val desktopMain by getting commonMain.dependencies { // 保留原有common依赖,移除implementation(libs.compose.nav) implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material) implementation(compose.ui) implementation(compose.components.resources) implementation(compose.components.uiToolingPreview) implementation(libs.ktor.client.core) implementation(libs.ktor.client.engine) implementation(libs.ktor.client.content.negotiation) implementation(libs.ktor.serialization.kotlinx.json) implementation(libs.kotlinx.coroutines.core) } desktopMain.dependencies { implementation(compose.desktop.currentOs) // 添加导航依赖到desktopMain implementation(libs.compose.nav) } }
2. 补充仓库配置
在根项目的build.gradle.kts中添加Google Maven仓库,确保能获取AndroidX相关依赖:
plugins { alias(libs.plugins.kotlinMultiplatform) apply false alias(libs.plugins.jetbrainsCompose) apply false alias(libs.plugins.kotlinSerialization) apply false } allprojects { repositories { google() mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } }
3. 统一版本兼容性
将libs.versions.toml中的nav版本更新为与Compose 1.6.2兼容的2.7.7:
[versions] # 其他版本不变 nav = "2.7.7"
4. 同步并验证
执行Gradle同步,之后即可在desktopMain的代码中正常导入并使用rememberNavController和NavHost。
内容的提问来源于stack exchange,提问作者W Walliet
相关产品推荐
相关产品推荐

