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

升级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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:05:23