类 lombok.javac.apt. LombokProcessor 不能访问类 com.sun.tools.javac.process.JavacProcessingEnvironment

我对编码还是个新手,正在尝试使用龙目岛插件为我的特定类的字段自动创建 Getters/setter 等等。在这样做的过程中,我遇到了以下错误:

错误是:

Java: java.lang.IllegalAccessError: lombok.javac.apt 类。LombokProcessor (在未命名模块@0x3b67ef9b 中)不能访问类 com.sun.tools.javac.Processing。JavacProcessingEnvironment (在模块 jdk.编译器中) ,因为模块 jdk.编译器不将 com.sun.tools.javac.Processing 导出到未命名的模块@0x3b67ef9b

在网上搜索之后,我发现这个错误与 OpenJDK 15中的一个问题有关,但是我目前正在使用 OpenJDK 16,因此我很困惑为什么我仍然得到这个错误。

这个线程声称有一个解决方案: https://github.com/rzwitserloot/lombok/issues/2681#issuecomment-748616687,但在实现插件后,它似乎没有任何差异,我仍然收到错误。

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

使用@Data (Lombok)初始化:

import lombok.Data;


@Data
public class Ingredient {


private final String id;
private final String name;
private final Type type;


public enum Type {
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}


}


我的 Pom 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>sia</groupId>
<artifactId>taco-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>taco-cloud</name>
<description>Taco Cloud Project</description>
<properties>
<java.version>16</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>


<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project>
211796 次浏览

@ abc0提供了一个能够使用龙目岛的临时解决方案:


就我的研究和我收到的对这个问题的各种回答而言,它看起来像 目前在 < em > OpenJDK 16 中无法运行 < em > 龙目岛 。因此,使用 < em > 龙目岛 的另一种方法是手动将 @data方法放入代码中。下面的链接简要地解释了如何做到这一点,以防你对这个主题还是新手: “ http://javabydeveloper.com/lombok-data-annoting/# :% 7E: text = Lombok% 20Data% 20annotion% 20(% 20% 40Data% 20) ,as% 20well% 20as% 20a% 20a% 20structor.rel = “ nofollow noReferrer”> Https://javabydeveloper.com/lombok-data-annotation/#:~:text=lombok%20data%20annotation%20(%20%40data%20),as%20well%20as%20a%20constructor.

代表 @Data实际表示的伪代码示例:

@Getter @Setter
@RequiredArgsConstructor
@ToString
@EqualsAndHashCode
public class User1 {
private Long id;
private String username;
  

}

当您需要生成以上七个需求时,龙目岛 @Data注释最大限度地减少了更多注释的使用,但 它们在运行代码时基本上实现了相同的目标。除外

我并不是这方面的专家,但是希望这能帮助其他使用 龙目岛但是需要找到替代品的人,因为他们的书/教程可能会使用它,而且你仍然愿意继续使用这本书/教程。

这似乎可以通过在 pom.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>

来自 龙目岛的访问 jdk 编译器的内部包与 Java-16不兼容的溶液

至少切换到包含 解决问题的龙目岛的 1.18.22版本

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

要查看 Lombok 的最后一个版本,请点击 Search.maven.org上的链接