記一次線上環境JAR沖突導致程序報錯org.springframework.web.util.NestedServletException

一、問題描述

有個文件導入功能,用到了Hutool 的加密解密功能,本地運行完全可以,但是線上報錯:“org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class cn.hutool.crypto.SmUtil.........”,如下圖所示

提示沒有找到類NoClassDefFoundError,打開對應的JAR,查看class 是存在的,于是想到了JAR沖突,網上也有人說因為hutool-all 和hutool-core 兩個包沖突,可是檢查了我的項目,并沒有pom 引入了hutool-core????

難道是服務器的JAVA 環境問題? 于是本地打包后,啟動項目,仍然報錯,看來確實是因為maven 打包后導致的jar 沖突了,問題的關鍵點就是要找出沖突的jar 到底是哪個?

二、遠程DEBUG

既然本地運行沒有問題,只有打包后存在問題,那么就只能用到idea 的遠程DEBUG 功能了 。

1、打開 IDEA,點擊 Run > Edit Configurations。

2、點擊左上角的 +,選擇 Remote JVM Debug。

3、配置調試參數:

  • Name:配置名稱(隨意)。
  • Host:遠程服務器的 IP 地址或域名。
  • Port:遠程服務器 JVM 的調試端口(如 5005),與你項目啟動端口不要一致
  • 注意一下JDK 要與線上環境一致

點擊 Apply 保存配置。

4、把紅框這段代碼當做啟動參數添加到線上環境啟動腳本里

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

例如 java?-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005?-jar? your-project.jar

參數說明:

  • agentlib:jdwp:啟用 JDWP 協議。
  • transport=dt_socket:使用 Socket 進行通信。
  • server=y:將當前 JVM 配置為調試服務器,等待調試客戶端連接。
  • suspend=n:JVM 是否在啟動時掛起,n 表示不掛起,y 表示掛起直到客戶端連接。
  • address=*:5005:指定調試監聽的端口。*:5005表示監聽所有IP地址的5005端口,也可以指定監聽xxx.xxx.xxx.xxx:5005

5、啟動遠程的線上項目后,記得本地idea 也啟動監聽

6、在報錯的代碼出打上斷點,這時候訪問遠程的線上接口,斷點會自動打進idea了

我的問題就是代碼53行報錯,這時候選中 SmUtil.sm2(privateKey, null);idea快捷鍵alt+F8

可見錯誤信息為:

class "org.bouncycastle.asn1.ASN1Encodable"'s signer information does not match signer information of other classes in the same package

現在找到了錯誤就是ASN1Encodable這個問題,在idea 里面雙擊shift ,搜尋這個類都存在哪些包里

好吧,浮出水面了,有兩個版本分別是bcprov-jdk14-138.jar 和 bcprov-jdk18on-1.73.jar

于是我手動在打包好的 lib 目錄里面刪除了較低版本bcprov-jdk14-138.jar? ,項目重啟,運行,測試通過

三、查看依賴關系,從項目上解決

方法一: 上面已經找到沖突的jar 了,接下來要找到究竟是在項目哪些jar 間接引用了這個bcprov-jdk14-138.jar,因為pom 里面搜不到

這里我們可以使用idea插件中的依賴分析插件,來幫助我們尋找沖突的jar包

成功下載后,找到我們的pom 文件,進行分析,如下圖

由此定位到了是core-renderer 這個包引用了bcprov-jdk14-138.jar ,確定這個類沒有被實際使用,直接排除就好了

方法二:如果不想下載插件,也可以用idea 自帶的maven分析視圖,注意要在下面選中對應pom

找到后,如需刪除直接選中右鍵,直接exclude 就好,會直接在pom 文件里面自動添加一下這段

<exclusions><exclusion><artifactId>bcprov-jdk14</artifactId><groupId>bouncycastle</groupId></exclusion></exclusions>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73463.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么快速部署Sock5代理到ubuntu云服務器

使用 Dante (推薦) 1. 安裝 Dante bash Copy sudo apt update sudo apt install dante-server -y 2. 配置 Dante 編輯配置文件 /etc/danted.conf&#xff1a; bash Copy sudo nano /etc/danted.conf 替換為以下內容&#xff08;按需修改端口和認證&#xff09;&#…

華為OD機試2025A卷 - 游戲分組/王者榮耀(Java Python JS C++ C )

最新華為OD機試 真題目錄:點擊查看目錄 華為OD面試真題精選:點擊立即查看 題目描述 2020年題: 英雄聯盟是一款十分火熱的對戰類游戲。每一場對戰有10位玩家參與,分為兩組,每組5人。每位玩家都有一個戰斗力,代表著這位玩家的厲害程度。為了對戰盡可能精彩,我們需要…

OpenRAND可重復的隨機數生成庫

OpenRAND 是一個 C++ 庫,旨在通過提供強大且可復制的隨機數生成解決方案來促進可重復的科學研究。它是一個簡單的僅頭文件庫,性能可移植,統計穩健,并且易于集成到任何 HPC 計算項目中。 特征 跨平臺支持:OpenRAND 旨在跨各種平臺無縫工作,包括 CPU 和 GPU。其僅標題庫設計…

接口/UI自動化面試題

一、UI自動化 1.1、接口和UI自動化有多少用例&#xff1f; 回答策略&#xff1a;根據接口設定用例&#xff0c;100個接口&#xff0c;自動化case在1500-2000左右。結合自身的項目&#xff0c;回答覆蓋的主功能流程。 示例&#xff1a; 接口自動化的測試case一般需要根據接口數…

使用Docker部署RabbitMQ

第一步&#xff1a;安裝 RabbitMQ # 1. 拉取鏡像 docker pull rabbitmq:3.12.0-management# 2. 啟動容器&#xff08;開放端口 數據持久化&#xff09; docker run -d \--nameshare_rabbitmq \-p 5672:5672 \ # AMQP 協議端口-p 15672:15672 \ # 管理界面端口…

2.基于多線程的TCP服務器實現

目錄 1. 簡單分析之前的代碼 2. 多線程服務器設計 2.1 C11線程的基本使用 2.2 服務器主體邏輯 3. 錯誤處理的封裝 4. 完整的代碼實現 客戶端代碼&#xff08;client.cpp&#xff09; 服務器代碼&#xff08;server.cpp&#xff09; 5. 運行方式 在我們預想中&#xff…

Python Web 框架 Django、Flask 和 FastAPI 對比

在探索 Python Web 框架時&#xff0c;Django、Flask 和 FastAPI 無疑是最常被提及的名字。根據我們最新的 Python 開發者調查&#xff0c;這三大框架繼續穩坐后端 Web 開發的熱門寶座。它們均為開源項目&#xff0c;并且與 Python 的最新版本無縫兼容。然而&#xff0c;面對不…

SQL Server數據庫表刪除分區

在 SQL Server 中刪除分區并將表恢復到非分區狀態&#xff0c;需按以下步驟操作&#xff1a; 一、合并所有分區 1. 檢查現有分區結構 首先確認表的分區方案和分區函數&#xff1a; -- 查看分區方案 SELECT * FROM sys.partition_schemes;-- 查看分區函數 SELECT * FROM sys…

信息安全和病毒防護——安全協議關于SSL和TLS協議的補充說明

文章目錄 SSL與TLS的關系SSL與TLS的核心區別SSL/TLS的典型應用安全建議總結SSL與TLS的關系 SSL(Secure Sockets Layer,安全套接層)和TLS(Transport Layer Security,傳輸層安全)是同一技術體系的演進版本,而非完全獨立的協議。其發展歷程如下: SSL 1.0(1994):未公開…

[原創](Modern C++)現代C++的關鍵性概念: 多維數組的下標引用.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、C …

從零構建大語言模型全棧開發指南:第二部分:模型架構設計與實現-2.2.3實戰案例:在筆記本電腦上運行輕量級LLM

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 實戰案例:在筆記本電腦上運行輕量級LLM2.2.3 模型架構設計與實現1. 環境與工具準備1.1 硬件要求1.2 軟件棧選擇2. 輕量級模型架構設計2.1 模型參數配置2.2 關鍵技術優化3. 實戰流程3.1 數據準備流程3.2…

工業軟件的破局與重構:從技術依賴到自主創新的未來路徑

工業軟件作為現代工業的“神經與大腦”&#xff0c;不僅是制造業數字化轉型的核心工具&#xff0c;更是國家工業競爭力的戰略制高點。近年來&#xff0c;中國工業軟件市場在政策驅動與技術迭代中迅猛發展&#xff0c;但核心技術受制于人的困境仍待突破。如何實現從“跟跑”到“…

歌曲緩存相關功能

1. 核心組件 MusicCacheManager (音樂緩存管理器) 單例模式&#xff1a;確保全局只有一個實例&#xff0c;方便管理。 private static var instance: MusicCacheManager?static func shared() -> MusicCacheManager {if instance nil {instance MusicCacheManager()}ret…

解決 Ubuntu/Debian 中 `apt-get` 報錯 “無法獲得鎖 /var/lib/dpkg/lock“

問題描述 在 Ubuntu/Debian 系統中運行 sudo apt-get install 或 sudo apt update 時&#xff0c;遇到以下錯誤&#xff1a; E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用) E: 無法鎖定管理目錄(/var/lib/dpkg/)&#xff0c;是否有其他進程正占用它&#…

阿里開源的免費數據集成工具——DataX

企業里真實的數據流轉是什么樣子的呢&#xff1f; 左側描述了一個企業真實的樣子&#xff0c;我們總是需要把數據從一個地方搬到另一個地方&#xff0c;最后就是搬來搬去搬成了一張張解不開的網。 右側則表達了使用DataX為中心實現數據的同步。 什么是DataX DataX是一個異構…

26考研——圖_圖的遍歷(6)

408答疑 文章目錄 三、圖的遍歷圖的遍歷概述圖的遍歷算法的重要性圖的遍歷與樹的遍歷的區別圖的遍歷過程中的注意事項避免重復訪問遍歷算法的分類遍歷結果的不唯一性 廣度優先搜索廣度優先搜索&#xff08;BFS&#xff09;概述BFS 的特點廣度優先遍歷的過程示例圖遍歷過程 BFS …

前端解決方案:實現網頁截圖并導出PDF功能

前端解決方案&#xff1a;實現網頁截圖并導出PDF功能 在前端開發中&#xff0c;我們經常會遇到需要將網頁內容導出為PDF的需求。本文將以一個準考證預覽和導出的例子&#xff0c;帶你一步步實現這個功能。我們會處理包括跨域圖片、Canvas繪圖、PDF生成等多個技術要點。 一、基…

【MySQL】表操作

表操作 一、創建表 1、語句2、語句介紹3、注意事項4、介紹5、示例 二、查看表結構 1、語句2、介紹3、返回的信息4、示例 三、添加字段 1、語句2、語句介紹3、示例 四、修改 1、語句2、語句介紹3、示例 五、刪除 1、語句2、示例 六、修改表名 1、語句2、語句介紹3、示例 七、刪…

[新聞.AI]國產大模型新突破:阿里開源 Qwen2.5-VL-32B 與 DeepSeek 升級 V3 模型

&#xff08;本文借助 Deepseek-R1 協助生成&#xff09; 在2025年3月24日至25日的短短24小時內&#xff0c;中國AI領域迎來兩大重磅開源更新&#xff1a;阿里通義千問團隊發布多模態大模型Qwen2.5-VL-32B-Instruct&#xff0c;而DeepSeek則推出編程能力大幅提升的DeepSeek-V3…

深入剖析C# List<T>的底層實現與性能奧秘

一、動態數組的本質&#xff1a;List的架構設計 在C#的集合類型體系中&#xff0c;List作為最常用的線性數據結構&#xff0c;其核心實現基于動態數組機制。與傳統數組不同&#xff0c;List通過智能的容量管理策略&#xff0c;在保持數組高速隨機訪問優勢的同時&#xff0c;突…