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

KMM项目注册Gradle任务时遭遇commonTest SourceSet未找到错误

解决KMM自定义一致性测试任务的Gradle问题

1. 确保SourceSet配置正确

先检查你的build.gradle.kts(Groovy则用build.gradle)中sourceSet的定义,conformanceTest需要正确融入KMM的sourceSet体系,同时关联commonTest的配置:

kotlin {
    sourceSets {
        val commonTest by getting
        val conformanceTest by creating {
            // 继承commonTest的依赖与源码结构
            dependsOn(commonTest)
            kotlin.srcDir("src/conformanceTest/kotlin")
            resources.srcDir("src/conformanceTest/resources")
            // 配置测试依赖
            dependencies {
                implementation(kotlin("test"))
                // 按需添加其他测试库,如kotest、mockk等
            }
        }
        // 可选:配置各平台专属的conformanceTest(如Android、iOS)
        val androidConformanceTest by creating {
            dependsOn(conformanceTest)
            // 平台特定配置
        }
    }
}

2. 正确注册自定义测试任务

KMM的测试任务不能直接用常规Gradle Test任务,需贴合KMM的插件逻辑绑定sourceSet的输出与类路径,同时显式依赖编译任务避免时序问题:

// 注册通用conformance测试任务
tasks.register<Test>("conformanceTest") {
    // 确保先完成conformanceTest的编译
    dependsOn(kotlin.sourceSets["conformanceTest"].compileTaskName)
    
    // 设置测试类路径:包含编译输出与运行时依赖
    classpath = kotlin.sourceSets["conformanceTest"].runtimeClasspath
    
    // 指定测试类所在目录
    testClassesDirs = kotlin.sourceSets["conformanceTest"].output.classesDirs
    
    // 配置测试执行引擎,比如JUnit Platform
    useJUnitPlatform()
}

Groovy版本的build.gradle写法:

tasks.register('conformanceTest', Test) {
    dependsOn kotlin.sourceSets.conformanceTest.compileTaskName
    classpath = kotlin.sourceSets.conformanceTest.runtimeClasspath
    testClassesDirs = kotlin.sourceSets.conformanceTest.output.classesDirs
    useJUnitPlatform()
}

3. 解决testClassesDirs为空的问题

之前用doFirst导致目录为空,本质是测试任务执行时编译任务还未完成,或是路径引用错误。上面的写法通过dependsOn强制编译优先执行,同时直接引用sourceSet的官方输出目录,避免手动拼接路径的误差。

另外确认项目结构是否符合预期:src/conformanceTest/kotlin下要有测试代码,同步Gradle后检查是否生成了compileConformanceTestKotlin这类编译任务。

4. 排查commonTest找不到的问题

若仍出现SourceSet with name 'commonTest' not found,需确保:

  • kotlin {}块中用by getting获取commonTest(而非by creating)
  • 升级Kotlin与KMM插件到最新稳定版本,避免兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:52:41