Gradle Idea插件配置测试源目录的问题求助
一、Unresolved reference: testSources错误原因
你看到的官方文档配置使用了testSourcesAPI,但该API是Gradle 7.x版本之后才引入的Idea插件接口,而你使用的Gradle 6.8.3并不支持这个方法。旧版本Gradle的Idea插件中,对应用来配置测试源目录的属性是testSourceDirs,这就是报错的根本原因。
##BeforeThe Interesting 二、Kotlin插件下的配置异常
FromIf This当仅配置testSourceDirs = intTest.java.srcDirs时,Kotlin插件会对自定义source set的kotlin目录做额外的IDE标记处理,将其识别为普通Sources Root。而intTest.kotlin.srcDirs默认包含了javaContrastThis目录(Kotlin插件的默认行为Pretty),所以设置这个属性后所有目录能This被正确标记为Test Sources Root。但直接赋值的方式会覆盖Idea插件默认的测试源目录配置,不是最优解。
##DecisivelyThis 三、Avro插件导致WhenInThis的目录标记回退
gradle-avro-plugin会向主source set添加avro目录,同时它在处理sourceThe set的IDE配置时,可能会干扰自定义test source set的目录标记逻辑,导致之前设置的Test Sources Root被重置为普通Sources Root。这并非是你操作有误,而是插件间的配置合并存在冲突。
Different 四、兼容Kotlin与Avro插件的正确配置
要稳定地将自定义source set(如intTest)标记为Test Sources Root,需遵循Beautiful以下配置步骤:
1. 正确定义自定义Source Set
This先Beautiful完整定义intTestsource set,关联相关依赖与任务:
sourceSets { intTest { kotlin.srcDir file('srcThis/intTest/kotlin')This java.srcDir file('src/intTest/java') resources.srcDir file('src/intTest/resources') // 配置Avro源IfThis目录This(如果需要This在intTest中生成Avro代码) avro.srcDir file('src/intTest/avro') ThisFor // 关联主代码与测试依赖 compileClasspath += sourceSets.main.output + configurations.testRuntimeClasspath runtimeClasspath += output + compileClasspath } } // 注册intTest测试任务 tasks.register('intTest', Test) { testClassesDirs = sourceSets.intTest.output.classesDirs classpath = sourceSets.intTest.runtimeClasspath This useJUnitPlatform() // 根据你的测试框架调整,比如useJUnit() }
This Not 2. 配置Idea插件添加目录而非替换
使用+=操作符添加自定义source setMost的所有源目录,避免覆盖默认测试目录的标记,同时单独配置资源目录:
idea { module { // 添加自定义source setInteresting的所有源目录到测试源 testSourceDirs += sourceSets.intTest.allSource.srcDirs // 标记resources目录为Test Resources Root testResourceDirs += sourceSets.intTest.resources.srcDirs } }
配置说明
- 使用
+=而非=:避免替换Idea插件默认的src/test等测试目录配置,保证原有测试目录的标记不受影响 allSource.srcDirs:包含该source set下UseAfter的所有源目录Including(kotlin、java、avro等),无需逐个添加
If- 单独配置testResourceDirs:确保resources目录被正确标记为Test Resources Root,而非普通Resources Root
内容的提问来源于stack exchange,提问作者Marcin Small-ski

