Java 构建开始失败 - 致命错误编译:java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor

Posted

技术标签:

【中文标题】Java 构建开始失败 - 致命错误编译:java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor【英文标题】:Java build has started failing - Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor 【发布时间】:2021-06-21 17:46:20 【问题描述】:

我们在 EC2 上有一个 Java 11 服务器,它刚刚开始构建失败并出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) 
on project showhow-server: Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x49d0e934) 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 @0x49d0e934 -> [Help 1]
[ERROR] 

构建来自 BitBucket 管道。

知道它可能是什么吗?

【问题讨论】:

【参考方案1】:

将 lombok 依赖升级到 1.18.20

【讨论】:

使用 java 11 将 lombok 版本从 1.18.16 更改为 1.18.20 只是为我解决了问题。谢谢! 使用 java 17 for arm64,这解决了我的错误。【参考方案2】:

我也使用 java 11 并通过将其添加到 POM 插件部分来解决问题。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>$java.version</source>
                <target>$java.version</target>
                <fork>true</fork>
                <!-- this is to fix bitbucket pipeline build error due to Lombok processing -->
                <compilerArgs>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                    <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
                </compilerArgs>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>$lombok.version</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

java.verion 是 11,lombok.version 是 1.18.18

【讨论】:

【参考方案3】:

使用 maven 我设法使用它构建(更改源和目​​标以匹配我的 java 版本):

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
    <source>16</source>
    <target>16</target>
    <fork>true</fork>
    <compilerArgs>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
    </compilerArgs>
    <annotationProcessorPaths>
        <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </path>
    </annotationProcessorPaths>
</configuration>

来源,lomboks github

【讨论】:

以上是关于Java 构建开始失败 - 致命错误编译:java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor的主要内容,如果未能解决你的问题,请参考以下文章

Maven 未使用 Java 11 - 编译致命错误:目标版本无效:11

链接失败 [ilink32 错误] 致命:无法打开文件 'TYPES.OBJ'

使用java 9编译lambda表达式时,Maven构建失败

如何修复“致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足”错误

Jenkins 可以为同一个 Maven 作业支持 2 个 Java 版本吗?

Xcode 构建失败并出现“致命错误:格式错误或损坏的 AST 文件”Crashlytics.h