为何@Value.Immutable在测试包中无法生成代码?
Immutables在测试目录下无法生成代码的问题
我写了这段代码:
@Value.Immutable public interface Foobar { List<Integer> getStuff(); // 其他自定义对象的getter方法 }
这段代码放在src/main/java目录下时,能正常生成对应的Immutable实现类,但移到src/test/java目录后,完全没有代码生成,目前还没找到原因。
我用Gradle命令./gradlew assemble执行构建,build.gradle里的依赖配置如下:
dependencies { annotationProcessor(libs.immutables.value) implementation(libs.immutables.value) implementation(libs.immutables.annotate) testAnnotationProcessor(libs.immutables.value) testImplementation(libs.immutables.value) testImplementation(libs.immutables.annotate) }
排查建议
- 换用正确的Gradle任务:
assemble任务默认只处理src/main/java下的主代码,不会触发测试代码的注解处理。要让测试目录的代码生成生效,需要执行./gradlew testClasses或者./gradlew test,这两个任务会处理测试源集的注解处理器逻辑。 - 检查依赖版本兼容性:部分旧版本的Immutables在测试环境下可能存在适配问题,确认
libs.immutables.value和libs.immutables.annotate是否为最新稳定版,尝试升级依赖版本后再测试。 - 查看注解处理器日志:在
build.gradle中添加编译参数,输出注解处理器的详细日志,方便定位问题:
运行测试相关任务后,查看控制台输出,看是否有注解处理器报错、跳过处理的提示。tasks.withType(JavaCompile) { options.compilerArgs += ["-Xlint:processing", "-verbose"] } - 确认测试类的访问权限:确保测试目录下的
Foobar接口是public修饰(虽然Immutables支持包私有,但测试环境的类加载规则可能有差异),同时检查包结构是否符合项目配置。
内容的提问来源于stack exchange,提问作者user1821961
相关产品推荐
相关产品推荐

