升级Java17+SpringBoot3后@Builder注解编译报错:annotation value异常
升级Java17+SpringBoot3后Lombok @Builder编译报错"annotation value must be an annotation"
问题详情
升级环境至Java17、SpringBoot3.0.2、Lombok1.18.24后,执行gradlew clean build时触发编译错误:
error: annotation value must be an annotation
错误日志指向类上的@Builder注解,该代码在Java11+SpringBoot2.7环境下可正常编译运行。
原因分析
Java17对泛型类型注解的编译校验更为严格,而Lombok1.18.24版本对Java17的支持存在缺陷——当字段使用泛型类型注解(如代码中List<@NotNull BaseBodyDataError>)时,Lombok生成的Builder代码不符合Java17的编译规范,导致报错。
解决方案
方案1:升级Lombok版本
将Lombok升级到1.18.26及以上(该版本开始完善Java17的类型注解处理逻辑)。Gradle依赖配置示例:
compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'
方案2:调整泛型注解写法(不升级Lombok时)
移除泛型参数上的@NotNull注解,改用字段级注解实现相同校验逻辑:
@Singular @Size(max = 8192) @NotEmpty // 确保列表非空 @Valid // 验证列表内每个BaseBodyDataError实例的合法性 @ApiModelProperty(value = "List of data errors") List<BaseBodyDataError> dataErrors;
此写法既满足业务校验需求,又避免了旧版Lombok与Java17编译器的兼容性问题。
内容的提问来源于stack exchange,提问作者Susheel Rao
相关产品推荐
相关产品推荐

