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

Java 17升级后Lombok @FieldNameConstants与MapStruct编译错误解决

Java 17升级后Lombok @FieldNameConstants编译错误排查与修复

1. 升级Lombok至Java 17兼容版本

Java 17收紧了内部API的访问限制,旧版Lombok(低于1.18.20)无法适配该规则。确保build.gradle中Lombok版本至少为1.18.20:

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.30'
    annotationProcessor 'org.projectlombok:lombok:1.18.30'
}

2. 调整Gradle编译参数,开放Lombok所需权限

在Gradle配置中添加编译器参数,允许Lombok访问Java 17限制的内部模块:

tasks.withType(JavaCompile) {
    options.compilerArgs += [
        '--add-opens', 'java.base/java.lang=ALL-UNNAMED',
        '--add-opens', 'java.base/java.util=ALL-UNNAMED',
        '--add-opens', 'java.base/java.reflect=ALL-UNNAMED'
    ]
    options.fork = true
}

3. 协调MapStruct与Lombok的注解处理器顺序

MapStruct依赖Lombok生成的Fields内部类,处理器顺序颠倒会导致找不到类。使用官方绑定库确保Lombok先执行:

dependencies {
    // 其他依赖保持不变
    annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' // MapStruct 1.5.0+支持Java 17
}

4. 升级OpenAPI生成器版本

低版本OpenAPI生成器可能生成不兼容Java 17的DTO代码或错误的Lombok注解。升级插件至6.0.0+:

plugins {
    id 'org.openapi.generator' version '7.6.0'
}

同时在生成配置中指定Java 17:

openApiGenerate {
    // 保留原有配置
    generatorName = "java"
    configOptions = [
        java8: "false",
        java17: "true",
        lombok: "true" // 确保启用Lombok注解生成
    ]
}

5. 模块化项目额外配置(若使用module-info.java)

如果项目启用了Java模块系统,需在module-info.java中开放DTO包给Lombok:

module your.project.module {
    requires lombok;
    requires org.mapstruct;
    opens com.your.project.dto to lombok; // 允许Lombok生成内部类
}

内容的提问来源于stack exchange,提问作者Francislainy Campos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:42:36