You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:39:52