簡體   English   中英

如何修復“無法制作受保護的最終 java.lang.Class java.lang.ClassLoader.defineClass?

[英]How to fix "Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass?

我已經使用 java 16 開始了一個項目,並且我在整個項目中都遇到了錯誤:

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 @6dfcffb5

看起來我從不同版本的 java 獲得的代碼在這個特定版本中不起作用。 知道我需要在 pojo class 中更改什么。 我在應用程序中只有 1 個 pojo,因為它是微服務。

謝謝。

您正在使用舊版本的 Spring / Spring Boot 不兼容且不支持 Java 16。

根據Spring Compatibility Matrix ,您需要使用 Spring 5.3.x 或更高版本才能與 Java 16 兼容。

For Spring-Boot, you need 2.7.1 or later for Java 17 compatibility... according to this Spring And Spring Boot Versions page.

另請注意,Java 16 也已報廢。 您可能應該使用 Java 的 LTS 版本之一; 即 Java 8、11 或 17。

(Winding back to an earlier Java LTS would "fix" the Spring compatibility issue, but IMO rolling Spring and Java forward is better. You don't want to be developing a new project on top of base that is already outdated.)


您看到的實際問題是由於某些東西(可能是 Spring 引導自定義類加載器)訪問“內部”API。 除非您對 JVM 的啟動方式進行一些調整,否則這將被阻止(在 Java 14 及更高版本中)。 本問答提供了一些背景信息:

但是,最好的解決方案是為您選擇的 Spring 和 Spring 啟動版本使用“支持”版本的 Java。

您可以通過以下步驟精確路徑來定義 JRE 系統庫:項目文件夾 -> 屬性 -> Java 構建路徑 -> 雙擊 JRE 系統庫並選擇您安裝的 JRE,它適用於我。 對不起我的英語不好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM