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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:57:42