java.lang.IllegalAccessError:lombok.javac.apt.LombokProcessor类无法访问com.sun.tools.javac.processing.JavacProcessingEnvironment类

java.lang.IllegalAccessError:lombok.javac.apt.LombokProcessor类无法访问com.sun.tools.javac.processing.JavacProcessingEnvironment类,java,spring,maven,lombok,intellij-lombok-plugin,Java,Spring,Maven,Lombok,Intellij Lombok Plugin,我对编码有点陌生,正在尝试使用Lombok插件为特定类的字段自动创建getter/setter e.t.c。在这样做的过程中,我遇到了以下错误: 错误: java:java.lang.IllegalAccessError:class lombok.javac.apt.LombokProcessor(在未命名模块@0x3b67ef9b中)无法访问类com.sun.tools.javac.processing.JavacProcessingEnvironment(在模块jdk.compiler中),

我对编码有点陌生,正在尝试使用Lombok插件为特定类的字段自动创建getter/setter e.t.c。在这样做的过程中,我遇到了以下错误:

错误:

java:java.lang.IllegalAccessError:class lombok.javac.apt.LombokProcessor(在未命名模块@0x3b67ef9b中)无法访问类com.sun.tools.javac.processing.JavacProcessingEnvironment(在模块jdk.compiler中),因为模块jdk.compiler不会将com.sun.tools.javac.processing导出到未命名模块@0x3b67ef9b

在网上搜索之后,我发现这个错误与OpenJDK15中的一个问题有关,但我目前正在使用OpenJDK16,因此我很困惑我仍然会遇到这个错误

这个线程声称有一个解决方案:但在实现插件后,它似乎没有任何区别,我仍然收到错误

我很可能犯了一个小错误,因为我是一个初学者,但如果有人知道我错过了什么,请让我知道

使用@Data(Lombok)初始化: 我的Pom文件:

4.0.0
org.springframework.boot
spring启动程序父级
2.4.4
新航
玉米卷云
0.0.1-快照
玉米卷云
塔可云项目
16
org.springframework.boot
弹簧启动装置
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧靴开发工具
运行时
真的
org.springframework.boot
弹簧起动试验
测试
org.projectlombok
龙目
org.springframework.boot
springbootmaven插件
@提供了一个临时解决方案,可以使用Lombok:


就我的研究进展和我对这个问题的各种回答而言,似乎目前在OpenJDK 16中运行Lombok是不可能的。因此,使用Lombok的另一种方法是将
@data
方法手动放入代码中。以下链接简要说明了如果您不熟悉此主题,如何执行此操作:

代表
@Data
真正代表的内容的伪代码示例:

@Getter @Setter 
@RequiredArgsConstructor
@ToString 
@EqualsAndHashCode
public class User1 {
  private Long id;
  private String username;
  
}
Lombok
@Data
注释在您需要生成上述所有七个需求时,将更多注释的使用降至最低,但是它们在运行代码时基本上实现了相同的目标。


我绝对不是这方面的专家,但希望这能帮助那些在使用Lombok时陷入困境但需要找到替代方案的人,因为他们的书/教程可能会使用它,而你仍然希望继续阅读这本书/教程。

似乎可以通过在
pox.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>16</source>
        <target>16</target>
        <!--                    <release>16</release>-->
        <fork>true</fork>
        <compilerArgs>
            <arg>--enable-preview</arg>
            <arg>-Xlint:all</arg>
            <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>
        <!--for unmappable characters in classes-->
        <encoding>UTF-8</encoding>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <!--for lombok annotations to resolve-->
        <!--contradictory to maven, intelliJ fails with this-->
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.16</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

org.apache.maven.plugins

至少切换到包含


org.projectlombok
龙目
1.18.20

如果您在JDK16上,为什么不使用记录?如果你是初学者,为什么不使用基础知识来学习它们的工作原理呢?已知Lombok在JDK16上发布的版本中无法正常工作。。。因此,您必须等待更新的版本可用或只是使用普通java。。。(IDE在这里可以帮助很多…。。。。顺便问一下:你能告诉我你在哪里找到的:
。。与OpenJDK 15中的一个问题有关。?@khmarbaise我认为这是OpenJDK 15的一个问题,因为这篇文章意味着在OpenJDK 16的发行版中,这个问题将不再存在:但是回顾一下,我想他只是指OpenJDK 16的beta版?是的,JDK16关闭了之前一直处于打开状态的东西(JDK中的内部东西),Lombok等公司正在使用这些东西。很明显,在更长的时间内,关闭将会发生……@khmarbaise作为一个提醒,我选择删除Lombok依赖项,而是在代码中手动生成getter、setter和e.t.c。在此之后,我的应用程序成功运行。我已尝试实现此功能,但收到以下错误:
java:invalid source release 15 with--enable preview(只有release 16才支持预览语言功能)
然后,我尝试使用版本16,但随后收到了原始错误。我仍然会收到此版本(1.18.20)和Java 16的错误。当我降级到Java15时,它消失了。
@Getter @Setter 
@RequiredArgsConstructor
@ToString 
@EqualsAndHashCode
public class User1 {
  private Long id;
  private String username;
  
}
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>16</source>
        <target>16</target>
        <!--                    <release>16</release>-->
        <fork>true</fork>
        <compilerArgs>
            <arg>--enable-preview</arg>
            <arg>-Xlint:all</arg>
            <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>
        <!--for unmappable characters in classes-->
        <encoding>UTF-8</encoding>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <!--for lombok annotations to resolve-->
        <!--contradictory to maven, intelliJ fails with this-->
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.16</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.20</version>
</dependency>