最近项目部署的时候,出现了一个maven打包失败的问题,报:class lombok.javac.apt.LombokProcessor错误,错误如下:

class lombok.javac.apt.LombokProcessor (in unnamed module @0x7c523bdd) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x7c523bdd

错误原因

这个错误通常是因JDK 9及以上版本引入了模块系统,导致Lombok不能直接访问某些内部API。解决这个问题的方法之一是通过为Java编译器添加特定的模块导出选项

解决方案

1、修改编译选项

在编译时添加特定的JVM参数,让JDK将需要的包导出给未命名模块。具体的参数是:

--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED

如果使用的是Maven,可以在你的pom.xml文件中添加这些参数。具体的配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <fork>true</fork>
                <compilerArgs>
                    <arg>--add-exports</arg>
                    <arg>jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

2、如果你使用的是Gradle

你可以在build.gradle文件中配置Java编译任务,添加模块导出选项:

tasks.withType(JavaCompile) {
    options.compilerArgs += [
        '--add-exports', 'jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED'
    ]
}

3、更新Lombok版本

确保你使用的是最新版本的Lombok,因为最新版本可能已经解决了这个问题。你可以在Lombok的GitHub页面Maven中央仓库上找到最新版本。

我的lombok版本如下:

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.18</version>
</dependency>

将lombok升级到1.18.20或以上即可 

4、JDK版本匹配

项目配置的JDK版本分别为:

  • Project Structure -> Project Setting -> Modules ->Dependencies -> Module SDK
  • Settings -> Java Compiler -> Module
    ​​​​​​​确保你的项目配置的JDK版本与实际使用的JDK版本匹配。

这样配置之后,当你运行mvn clean install或其他Maven编译命令时,编译器将使用指定的参数,从而解决Lombok与JDK模块化系统之间的兼容性问题

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐