java编译报错:class lombok.javac.apt.LombokProcessor cannot access class com.sun.tool

956 阅读1分钟

错误详情如图所示:

企业微信截图_17168824388679.png

这个错误通常是因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中央仓库上找到最新版本。

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

  • Project Structure -> Project Setting -> Modules ->Dependencies -> Module SDK
  • Settings -> Java Compiler -> Module

确保你的项目配置的JDK版本与实际使用的JDK版本匹配。

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