最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決JDK9以上的非法反射訪問警告的問題

 更新時(shí)間:2025年11月24日 08:45:41   作者:氷泠  
文章介紹了在JDK9及以上版本中,由于模塊系統(tǒng)限制,舊版庫(kù)(如protostuff)會(huì)出現(xiàn)非法反射訪問的警告,解決方法是使用--illegal-access參數(shù),并通過--add-opens參數(shù)允許特定模塊的非法反射訪問,文章還提供了在IDEA和構(gòu)建工具(Maven和Gradle)中配置這些參數(shù)的示例

1 問題描述

JDK9以上很多庫(kù)都有這種非法反射訪問的警告,比如protostuff

解決方法兩個(gè):

  • JDK降級(jí)
  • 添加JVM參數(shù)

2 原因

降到JDK8能解決以上問題。

但是這不是本文的重點(diǎn)。

先說(shuō)一下出現(xiàn)該警告的原因,筆者使用的JDKOpenJDK 11,JDK9以上模塊不能使用反射去訪問非公有的成員/成員方法以及構(gòu)造方法,除非模塊標(biāo)識(shí)為opens去允許反射訪問。舊JDK制作的庫(kù)(JDK8及以下)運(yùn)行在JDK9上會(huì)自動(dòng)被標(biāo)識(shí)為未命名模塊,為了處理該警告,JDK9以上提出了一個(gè)新的JVM參數(shù):--illegal-access。

3--illegal-access

該參數(shù)有四個(gè)可選值:

  • permit:默認(rèn)值,允許通過反射訪問,因此會(huì)提示像上面一樣的警告,這個(gè)是首次非法訪問警告,后續(xù)不警告
  • warn:每次非法訪問都會(huì)警告
  • debug:在warn的基礎(chǔ)上加入了類似e.printStackTrace()的功能
  • deny:禁止所有的非法訪問除了使用特別的命令行參數(shù)排除的模塊,比如使用--add-opens排除某些模塊使其能夠通過非法反射訪問

因此解決的辦法很簡(jiǎn)單,將其設(shè)置為deny,并添加--add-opens開啟對(duì)應(yīng)的允許非法反射訪問的模塊即可。

可以通過先設(shè)置為debug找到對(duì)應(yīng)的非法訪問的代碼,比如protostuff中的非法反射訪問代碼段如下:

這都是JDK基本模塊的代碼,因此,添加--add-opens=java.base/java.lang.invoke=ALL-UNNAMED即可。--add-opens可以使模塊中的包對(duì)其他模塊開放,這樣就可以在運(yùn)行期使用深層反射訪問該程序包中的所有成員類型。

4 總結(jié)

因此解決的辦法是添加如下兩個(gè)JVM參數(shù):

--illegal-access=deny --add-opens java.base/java.lang=ALL-UNNAMED

IDEA可以在運(yùn)行配置中的VM options中添加:

如果使用Maven打包的時(shí)候還是會(huì)出現(xiàn)警告,可以在IDEA中的Maven配置中添加全局的Maven參數(shù):

另外,如果使用Gradle而不是Maven作為管理工具,Gradle測(cè)試的時(shí)候還是會(huì)顯示警告,盡管Gradle運(yùn)行配置里面有VM Options選項(xiàng):

但在這里添加是沒用的,正確的做法是在build.gradle中添加:

test {
    useJUnitPlatform()
    jvmArgs('--illegal-access=deny')
    jvmArgs('--add-opens', 'java.base/java.lang.invoke=ALL-UNNAMED')
}

這樣Gradle測(cè)試也沒有問題了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解

    基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解

    這篇文章主要介紹了基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java計(jì)算兩個(gè)程序運(yùn)行時(shí)間的實(shí)例

    Java計(jì)算兩個(gè)程序運(yùn)行時(shí)間的實(shí)例

    下面小編就為大家?guī)?lái)一篇Java計(jì)算兩個(gè)程序運(yùn)行時(shí)間的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-04-04
  • 關(guān)于Sentinel中冷啟動(dòng)限流原理WarmUpController

    關(guān)于Sentinel中冷啟動(dòng)限流原理WarmUpController

    這篇文章主要介紹了關(guān)于Sentinel中冷啟動(dòng)限流原理WarmUpController,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-04-04
  • java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法

    java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法

    java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法,需要的朋友可以參考一下
    2013-03-03
  • springboot實(shí)現(xiàn)token驗(yàn)證登陸狀態(tài)的示例代碼

    springboot實(shí)現(xiàn)token驗(yàn)證登陸狀態(tài)的示例代碼

    本文主要介紹了spring?boot?實(shí)現(xiàn)token驗(yàn)證登陸狀態(tài),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • java如何連續(xù)執(zhí)行多條cmd命令

    java如何連續(xù)執(zhí)行多條cmd命令

    這篇文章主要介紹了java如何連續(xù)執(zhí)行多條cmd命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • RabbitMQ工作模式中的發(fā)布確認(rèn)模式示例詳解

    RabbitMQ工作模式中的發(fā)布確認(rèn)模式示例詳解

    發(fā)布確認(rèn)模式用于確保消息已經(jīng)被正確地發(fā)送到RabbitMQ服務(wù)器,并被成功接收和持久化,本文通過實(shí)例代碼給大家介紹RabbitMQ工作模式之發(fā)布確認(rèn)模式,感興趣的朋友一起看看吧
    2025-05-05
  • Java8中Map常用的遍歷方式

    Java8中Map常用的遍歷方式

    這篇文章主要給大家介紹了關(guān)于Java8中Map常用的遍歷方式,map屬于java中的頂級(jí)接口之一,區(qū)別于list,map是鍵值對(duì)的形式存在,需要的朋友可以參考下
    2023-07-07
  • SpringBoot中application.properties、application.yaml、application.yml區(qū)別

    SpringBoot中application.properties、application.yaml、applicati

    本文主要介紹了SpringBoot中application.properties、application.yaml、application.yml區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • MyBatis實(shí)現(xiàn)分頁(yè)全過程

    MyBatis實(shí)現(xiàn)分頁(yè)全過程

    MyBatis分頁(yè)有三種方式:手動(dòng)SQL分頁(yè)(性能高但需處理數(shù)據(jù)庫(kù)差異)、RowBounds(簡(jiǎn)單但不推薦)、PageHelper分頁(yè)插件(自動(dòng)改寫SQL,推薦生產(chǎn)環(huán)境),PageHelper適合百萬(wàn)級(jí)數(shù)據(jù)優(yōu)化,是終極解決方案
    2025-08-08

最新評(píng)論

龙井市| 石棉县| 阳春市| 吉安市| 龙游县| 宁化县| 夏邑县| 正定县| 确山县| 明光市| 商洛市| 天津市| 分宜县| 嘉荫县| 什邡市| 金昌市| 张掖市| 凌云县| 辉县市| 朝阳县| 张北县| 澄江县| 洛隆县| 河北省| 漯河市| 开平市| 广汉市| 阿城市| 秭归县| 茌平县| 久治县| 连平县| 山西省| 淳化县| 集安市| 中江县| 兴和县| 鹤庆县| 洪洞县| 丽水市| 巩义市|