如何在Gradle子模块A中排除子模块B的指定测试类?
解决Gradle模块A执行test任务时排除模块B测试类的问题
问题根源
你之前的配置失效有两个核心原因:
- Gradle的
test任务的excludes/exclude是针对编译后的类文件路径(而非源文件目录)生效的,你写的B/src/test/**是源文件路径,任务扫描不到对应的类,所以规则不生效。 - 模块B的测试类在被模块A依赖后,是以编译后的
.class文件形式存在于类路径中,你需要通过类的包路径/全限定名来指定排除规则,而不是源文件的目录结构。
正确配置方式
步骤1:明确要排除的测试类信息
先确定模块B中需要排除的测试类的包路径(比如com.example.b.test)或者具体类的全限定名(比如com.example.b.test.UserServiceTest)。
步骤2:在模块A的build.gradle中配置排除规则
根据需要选择以下配置方式:
test { // 排除模块B某个包下的所有测试类(用斜杠分隔包名,对应类文件结构) exclude 'com/example/b/test/**' // 或者排除单个具体测试类(可带.class后缀,也可不带) // exclude 'com/example/b/test/UserServiceTest' // exclude 'com/example/b/test/UserServiceTest.class' }
额外注意点
- 确认模块B的测试类是否真的被引入到模块A的测试类路径中:通常
compile project(':B')只会引入B的主代码,不会包含测试代码。如果你的A能执行B的测试,大概率是用了testImplementation project(':B')(Gradle 4+)或testCompile project(':B')这类依赖配置,才会把B的测试代码加入A的测试类路径。
内容的提问来源于stack exchange,提问作者gcoderx
相关产品推荐
相关产品推荐

