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

使用Gradle时测试代码无法找到源码的问题求助

解决Gradle测试编译时找不到源码包的问题

你的问题核心是自定义SourceSet配置错误,导致测试任务无法访问主源码的编译产物,咱们一步步来修复:

问题根源

Gradle默认的主源码集是main,测试源码集test会自动依赖main的编译输出。但你自定义了一个名为source的源码集,却没有让test的编译路径包含这个source集的编译结果,所以测试代码编译时找不到HoaryGuts这类主源码里的包。

另外,你的依赖配置也有小问题:TestNG是测试专属依赖,应该用testImplementation(Gradle 4.0+推荐)而不是compile,后者已经被官方废弃。

修复方案(推荐遵循Gradle约定)

最规范的做法是改用Gradle默认的main源码集,这样不需要额外配置,测试就能自动关联主源码。修改你的sourceSets和依赖部分:

修改后的sourceSets配置

sourceSets {
    main {
        java {
            srcDir "src" // 你的主源码目录
        }
        resources {
            srcDir "resources" // 资源文件目录
        }
    }
    test {
        java {
            srcDir "tst" // 测试源码目录
        }
    }
}

更新依赖配置

dependencies {
    testImplementation group: 'org.testng', name: 'testng', version: '6.9.10'
}

这样修改后,执行gradle test或gradle build时,Test任务会自动把main的编译类加入测试的classpath,就能找到HoaryGuts包了。

如果一定要保留自定义的source源码集

如果你坚持要用source作为主源码集的名字,那需要手动配置测试的编译路径包含source的输出:

sourceSets {
    source {
        java {
            srcDir "src"
        }
        resources {
            srcDir "resources"
        }
    }
    test {
        java {
            srcDir "tst"
        }
        // 让测试编译路径包含source的编译产物及主依赖
        compileClasspath = source.output + configurations.compile
        runtimeClasspath = source.output + configurations.runtime + test.output
    }
}

同样记得把TestNG依赖改为testImplementation。

验证修复

修改后执行gradle clean test,先清理之前的编译缓存,再运行测试,应该就能解决包不存在的编译错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:02:01