如何禁用Google KSP在测试目录中的代码生成任务
解决方案
方法1:仅为main源集添加KSP处理器依赖
默认情况下,ksp()依赖会对所有源集(main、test等)生效,导致test源集也触发代码生成。只需将依赖改为仅作用于main源集:
在methods/build.gradle.kts的dependencies块中修改:
dependencies { implementation(project(":engine")) implementation(project(":methodsProcessor")) testImplementation(kotlin("test")) testImplementation(testFixtures(project(":engine"))) testImplementation("org.junit.jupiter:junit-jupiter-params:5.8.2") // 仅为main源集添加KSP处理器 kspMain(project(":methodsProcessor")) }
这样KSP只会处理main源集的代码,不会生成test目录下的文件,也不会触发:methods:kspTestKotlin任务。
方法2:禁用kspTestKotlin任务
如果需要保留全局ksp依赖,但单独禁用test相关的任务,需确保在任务创建后再配置。可以使用afterEvaluate块延迟查找任务,或者直接在顶层配置:
在methods/build.gradle.kts中添加:
afterEvaluate { tasks.findByName("kspTestKotlin")?.enabled = false }
或者更精确地指定任务:
tasks.named("kspTestKotlin") { enabled = false }
之前的错误是因为将任务配置放在了ksp{}扩展块内,该块用于配置KSP通用选项而非直接操作任务,导致任务查找时机过早找不到目标任务。
方法3:从KSP处理中移除test源集
通过KSP扩展配置,指定仅处理main源集,移除test源集:
在methods/build.gradle.kts中添加:
ksp { sourceSets { remove(sourceSets.test.get()) } }
此配置会告诉KSP不要处理test源集的代码,自然不会生成对应的目录和文件,也不会执行test相关的KSP任务。
内容的提问来源于stack exchange,提问作者gxyd
相关产品推荐
相关产品推荐

