使用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
相关产品推荐
相关产品推荐

