模块 jdk.compiler 没有向未命名模块 @4bae33a6 "opens com.sun.tools.javac.processing"。

17
我从Github上克隆了这个项目:

https://github.com/PacktPublishing/Java-Machine-Learning-for-Computer-Vision.git

我想使用其中的FaceRecognition功能。但是,当我在IntelliJ中尝试运行时,出现以下错误:

java: java.lang.ExceptionInInitializerError Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @4bae33a6

有什么解决办法吗?

5
是的,您正在使用JDK-16,并且您所涉及的项目触及了一些该Java版本禁止使用的内部API。 - Eugene
5个回答

25

对我来说问题在于lombok版本

将Java8升级到Java17后,将lombok版本从1.18.6升级到1.18.26

旧版本:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
    <scope>provided</scope>
</dependency>

更新了Java 17版本

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.26</version>
    <scope>provided</scope>
</dependency>

2
对我来说有效,但不知道根本原因:D - m.nguyencntt
1
没问题,对我来说也可以。非常感谢。 - Naseer Mohammad

21

我曾遇到相同的问题,首先检查Maven使用的Java版本:

mvn -v

如果设置为Jdk 16,则需要更新以下文件:

/usr/local/Cellar/maven/{version}/bin/mvn

并设置

JAVA_HOME:-$(/usr/libexec/java_home)

然后再次运行mvn -v确认即可。

以上步骤解决了我的问题。


在最后一步中,你设置了JAVA_HOME:-$(/usr/libexec/java_home)文件的位置在哪里? - hoanghuychh
3
对我来说,它被设置为"/Library/Java/JavaVirtualMachines/{jdk版本}/Contents/Home"。 - Govind Kalyankar

2
在我的情况下,我不得不升级Lombok依赖版本,然后问题就得到解决了。

1
不幸的是,这个错误可能有多种原因,但都是由于编译所使用的JDK和依赖库之间的兼容性问题引起的。
要了解确切的原因,请使用-e或-X开关运行maven。这将生成指向确切不兼容性问题的堆栈跟踪。在此之后,您可以更改JDK版本和/或升级/降级库。
在我的情况下,问题出在lombok(下面是跟踪)。我必须将版本从1.16.xx升级到1.18.28才能进行编译。
由于:java.lang.reflect.InaccessibleObjectException:无法使私有字段com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs可访问:模块jdk.compiler未向匿名模块@4ed56cfd“opens com.sun.tools.javac.processing” at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.lang.reflect.Field.checkCanSetAccessible(Field.java:178) at java.lang.reflect.Field.setAccessible(Field.java:172) -> at lombok.javac.apt.LombokProcessor.getFieldAccessor(LombokProcessor.java:116) -> at lombok.javac.apt.LombokProcessor.(LombokProcessor.java:108) at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ...

1
你说得对!在阅读了你的帖子后,我找到了一个类似的异常堆栈跟踪。现在明白为什么必须升级 Lombok 了。 - asgs

0

将你的IDE设置为使用正确的SDK版本,这对我解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接