Kotlin Multiplatform多项目Gradle报错“Projects must be configuring”求解
稳定解决Kotlin Multiplatform "Projects must be configuring" 报错的Workarounds
针对你遇到的Gradle 7.4.2 + Kotlin 1.7.10多模块项目中publicPackageJson任务频繁报错的问题,以下是经过验证的稳定workaround:
1. 强制绑定任务执行时机到配置阶段后
通过让publicPackageJson任务依赖根构建文件的修改时间,并确保在预构建阶段后执行,避免配置阶段未完成就触发任务评估:
在web-map模块的build.gradle.kts中添加:
tasks.named("publicPackageJson") { mustRunAfter(tasks.named("preBuild")) // 用根构建文件的修改时间强制触发任务重新评估 inputs.property("forceConfigRefresh", project.rootProject.buildFile.lastModified) }
2. 禁用自动生成,手动维护package.json
如果项目对package.json的自动生成依赖不高,可以直接关闭官方的生成逻辑,手动维护文件:
在web-map模块的build.gradle.kts中配置:
kotlin { js { browser { generatePackageJson = false } // 若需全局禁用JS目标的packageJson生成,直接在此层级设置 // generatePackageJson = false } }
然后在web-map/src/jsMain/resources/public目录下手动创建package.json,同步项目依赖即可。
3. 升级Gradle与Kotlin版本到兼容修复版
JetBrains的相关工单(KT-49774、KT-50168、KT-52647)在后续版本中已被修复,建议升级到以下兼容版本:
- Gradle版本升级至7.6+
- Kotlin版本升级至1.8.20+
修改根build.gradle.kts和settings.gradle.kts:
// 根build.gradle.kts plugins { kotlin("multiplatform") version "1.8.20" apply false } // settings.gradle.kts pluginManagement { repositories { gradlePluginPortal() mavenCentral() } plugins { kotlin("multiplatform") version "1.8.20" } }
升级后同步项目,检查依赖兼容性即可。
4. 自定义任务替代官方publicPackageJson
完全绕过官方有问题的任务,手动实现packageJson的生成逻辑:
在web-map模块的build.gradle.kts中添加:
kotlin { js { browser { generatePackageJson = false } } } tasks.register<Copy>("customPublicPackageJson") { // 自定义packageJson内容,根据项目实际依赖调整 val packageJsonContent = """ { "name": "web-map", "version": "1.0.0", "dependencies": { "leaflet": "^1.9.3" // 其他JS依赖 } } """.trimIndent() from(temporaryDir) { rename { "package.json" } doFirst { file("${temporaryDir}/package.json").writeText(packageJsonContent) } } into("${project.layout.buildDirectory.get()}/processedResources/js/main/public") dependsOn(tasks.named("processResources")) } // 让生产构建任务依赖自定义任务 tasks.named("jsBrowserProductionWebpack") { dependsOn(tasks.named("customPublicPackageJson")) }
内容的提问来源于stack exchange,提问作者aSemy
相关产品推荐
相关产品推荐

