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

升级Lombok至1.18.28搭配JDK17时编译报错原因咨询

Java 17升级后Lombok+MapStruct编译报错:InaccessibleObjectException的解决方案

问题成因

  1. Java 17的模块系统(JPMS)默认限制反射访问JDK内部非公开API,报错中jdk.compiler模块未向未命名模块开放com.sun.tools.javac.processing包,而Lombok 1.18.28仍依赖该内部包的反射调用。
  2. MapStruct与Lombok的注解处理器执行顺序冲突,可能触发Lombok的不安全反射逻辑。

解决方案

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

优先升级Lombok至1.18.30及以上,该版本彻底适配Java 17模块系统,移除了对JDK内部API的不安全反射。修改Maven依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

若使用Lombok Maven插件,同步更新版本:

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>1.18.30.0</version>
</plugin>

2. 添加JVM编译参数开放模块访问(临时方案)

若暂时无法升级Lombok,可通过Maven编译器插件添加JVM参数,允许jdk.compiler模块向未命名模块开放指定包:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <source>17</source>
        <target>17</target>
        <compilerArgs>
            <arg>--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
            <arg>--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
        </compilerArgs>
    </configuration>
</plugin>

3. 配置注解处理器执行顺序

确保Lombok处理器优先于MapStruct执行,因为MapStruct依赖Lombok生成的getter/setter。在Maven编译器插件中显式声明处理器路径:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <source>17</source>
        <target>17</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.30</version>
            </path>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.5.2.Final</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

验证方法

执行mvn clean compile重新编译项目,若仍报错,清理本地Maven仓库中Lombok的缓存目录(~/.m2/repository/org/projectlombok)后重新拉取依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:42:13