最近项目部署的时候,出现了一个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模块化系统之间的兼容性问题