Eclipse无法打开Java文件 -> 无法创建受保护的final java.lang.Class java.lang.ClassLoader.defineClass。

18

添加Lombok库后,出现以下错误:

An error has occurred. See error log for more details.
Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @1d1c37d5

2
你在问题标签中同时打了 [java-17][eclipse-2021-09]。由于 Eclipse 2021-09 不支持 Java 17,我猜测你已经安装了 Java 17 Support for Eclipse 2021-09 (4.21),这是即将发布的 Java 17 支持的预览版/BETA,该版本将于2021年12月15日随 Eclipse 2021-12 (4.22) 一起发布。请确保已向 Eclipse 报告了此问题,并提供最小可重现示例和错误日志。 - howlger
3
JDK 17不再支持--illegal-access=permit。之前的版本也一直在警告这种访问方式,现在就不行了。 - Holger
在我的情况下,我必须更改eclipse.ini VM路径:-vm C:\bin\jdk-11.0.18\bin,如https://dev59.com/YlEG5IYBdhLWcg3wUKCU#68134496所建议。 - Clover
9个回答

29

升级到 Lombok 1.18.22 插件后,我遇到的这个问题就解决了。我尝试添加 --add-opens 标记,但 Eclipse 启动器会因此而崩溃。我认为这只是 Java 17 和 Lombok Eclipse IDE 插件不兼容的结果。


即使使用了 Lombok 1.18.24,我的项目仍无法运行... :/ - Digao
嗯嗯嗯,我有点困惑。那是哪个版本的Eclipse? - Tod Harter
1
我的问题出现在安装 lombok jar 后。它是旧版本 - 1.18.4。更新到最新版本(1.18.24)有助于解决问题。 - Urvashi Soni
我的问题也通过升级并按照这个链接"https://www.youtube.com/watch?v=VR7VaiXHJEY"得到了解决。 - Charan
那么,降级插件是解决方案吗? - undefined

19
将以下行添加到eclipse.ini文件的末尾。
--illegal-access=warn
--add-opens=java.base/java.lang=ALL-UNNAMED

5
由于您的问题特别提到了 Java 17,因此指定 --illegal-access=warn 没有意义,因为它不受支持并将被忽略。 - Holger
1
谢谢!这个解决了我在macOS上安装JDK 17的Eclipse 2021-09(带有lombok)时遇到的问题。如果没有这个修复,Eclipse确实会启动和运行,但是每个导入的Maven项目都会出错并给出问题中的错误。我花了整整一天时间重新安装不同版本的Eclipse,重新导入项目,在Eclipse中选择不同的JDK,带或不带lombok等等...什么都没用。但是将这两行添加到eclipse.ini中就解决了问题。 - Benjamin M
3
@Thirumal 你有进行交叉检查吗?当你连接电源插头并将其涂成绿色后,计算机工作是否证明涂成绿色解决了问题?如果不使用无效的--illegal-access=warn选项,尝试添加--add-opens java.base/java.lang=ALL-UNNAMED选项呢? - Holger
5
“我只是把这些行复制了过来”——这很好地概括了为什么我们被恶劣的软件淹没。即使现在,我已经明确告诉你这是两个独立的选项,并且只有其中一个在JDK 17中起作用,你仍然拒绝尝试去理解。是的,没有绿色和电缆拔掉,电脑就无法工作,但是插上电缆并涂上绿色油漆,电脑可以工作。现在,你只需要明白这并不意味着绿色油漆是必要的。或者只需在命令提示符中执行jdk-17\bin\java --illegal-access=warn x并注意警告消息。 - Holger
@howlger 我不确定这是否是Lombok的问题。当我导入一个新的Spring Boot应用程序时,没有出现错误,但是当我从工作中导入我的项目时(所有项目都使用Spring Boot 2.5.4,并且有许多不同的依赖项:Hibernate、Jackson、Elasticsearch、MongoDB、MySQL、Freemarker等),就会出现错误。我的机器运行的是Eclipse 2021-09(4.21.0)、Lombok 1.18.20、macOS 11.6、OpenJDK 17(2021-09-14 LTS)。 - Benjamin M
显示剩余7条评论

7
我唯一成功的方法是从lombok官网直接下载lombok,而不是使用maven文件夹中提供的版本。

1
你的回答可以通过添加额外支持信息来改进。请[编辑]以添加更多细节,例如引用或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

2
在我的情况下,我解决了将Java版本从16更改为11的问题。
在我的情况下,添加以下行:
--illegal-access=warn
--add-opens java.base/java.lang=ALL-UNNAMED

Eclipse无法启动。 版本:2021-03(4.19.0) 构建ID:20210312-0638

回答可以解释以帮助未来的读者。为什么添加这行代码可以帮助解决问题? - Vishnu Dasu
您的回答可以通过提供更多支持信息来改进。请进行[编辑]以添加更多详细信息,例如引用或文档,以便他人可以确认您的回答是否正确。您可以在帮助中心中找到有关如何编写好回答的更多信息。 - Community

1

看起来是lombok插件出了问题。 我已经从eclipse.ini文件中将其删除,问题得到解决。

删除以下行:

-javaagent:C:\<location>\eclipse-jee-2022-03-R-win32-x86_64\lombok.jar

1

在配置了 STS 4.17.2.RELEASE 中的 lombok 后,我也遇到了同样的问题。

我已经从 ini 文件中删除了以下属性。

--add-opens=java.base/java.io=ALL-UNNAMED
--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/sun.security.ssl=ALL-UNNAMED
-Dsun.java.command=SpringToolSuite4

我尝试了许多解决方案,但没有起作用。因此,我将其与我旧的STS版本进行了比较。

老实说,我不知道实际原因。


0

对于我的情况,以上方法都不适用于一个特定的项目。

  1. 导入现有的Maven项目或创建一个Maven项目
  2. 进入项目资源管理器,右键单击pom.xml文件,然后选择运行为Maven install。
  3. 然后你想要做什么就做什么。

希望这能满足您的需求。您可以从样例Spring Boot项目中下载示例Spring Boot项目。

或者您可以从终端或cmd运行Maven项目。只需进入项目根目录,然后运行像maven clean install这样的Maven任务。祝编码愉快 :)


0

你需要检查你的IDE指向的Java exe在.ini文件中的位置。换句话说,只需将你的eclipse.ini指向正确的java.exe文件夹,错误就会消失。这对我在Spring STS中有效,"可能"这个同样的方法也适用于Eclipse。


0
我遇到了上面提到的同样问题。当我下载了新版本的lombok.jar时,问题得到了解决。

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