如何排查并解決項目啟動時報錯Error encountered while processing: java.io.IOException: closed 的問題

如何排查并解決項目啟動時報錯Error encountered while processing: java.io.IOException: closed 的問題


摘要
本文針對Java項目啟動時出現的java.io.IOException: closed錯誤,提供系統性解決方案。該異常通常由流資源異常關閉或損壞引發,常見于Maven依賴損壞(mvn dependency:purge-local-repository)、Wrapper腳本缺失(mvn wrapper:wrapper)、IDE緩存異常(Invalidate Caches)或Spring Boot插件配置不當(顯式指定spring-boot-maven-plugin版本)等情況。通過分步操作(清理本地倉庫、重裝Wrapper、清理IDE緩存、檢查pom配置)并結合日志調試(-X參數),可快速定位問題根源。最后提出預防建議:CI/CD定期清理依賴、版本化Wrapper文件、固定插件版本,有效提升項目啟動穩定性與團隊協作一致性。
關鍵詞:
Java IOException, Maven依賴修復, Spring Boot啟動異常, IDE緩存清理, Wrapper腳本維護

在這里插入圖片描述

文章目錄

    • 作者名片 ??
    • 加入我們AI共創團隊 🌐
    • 加入貓頭虎的共創圈,一起探索編程世界的無限可能! 🚀
  • 正文
    • 1. 問題描述與復現
    • 2. 錯誤原因初步分析
    • 3. 詳細排查與解決步驟
      • 3.1 清理本地 Maven 倉庫并重新下載依賴
      • 3.2 刪除并重新下載 Spring Boot Maven 插件
      • 3.3 檢查并重裝 Maven Wrapper
      • 3.4 清理 IntelliJ IDEA 緩存并重啟
      • 3.5 檢查 `pom.xml` 中插件配置
    • 4. 復測與驗證
    • 5. 預防與最佳實踐
  • 粉絲福利
      • 聯系我與版權聲明 📩



作者名片 ??

  • 博主貓頭虎
  • 全網搜索關鍵詞貓頭虎
  • 作者微信號Libin9iOak
  • 作者公眾號貓頭虎技術團隊
  • 更新日期2025年07月21日
  • 🌟 歡迎來到貓頭虎的博客 — 探索技術的無限可能!

加入我們AI共創團隊 🌐

  • 貓頭虎AI共創社群矩陣列表
    • 點我進入共創社群矩陣入口
    • 點我進入新矩陣備用鏈接入口

加入貓頭虎的共創圈,一起探索編程世界的無限可能! 🚀


貓頭虎分享No bug

正文

1. 問題描述與復現

當我們在 IntelliJ IDEA 中直接運行或使用 Maven Wrapper 啟動 Spring Boot(或其他 Java 項目)時,控制臺直接報出:

在這里插入圖片描述

而項目結構如下,使用了 Maven Wrapper:
在這里插入圖片描述

此時無任何其他堆棧信息,僅這一行提示,導致難以定位根因。


2. 錯誤原因初步分析

java.io.IOException: closed 本質是對一個已經關閉的流(Stream)或資源再次進行讀寫操作時拋出的異常。這類問題在 Spring Boot 項目中常見于:

  1. Maven 本地依賴或插件 JAR 損壞
    Maven 構建時如果某個依賴包不完整,就可能導致無法正確加載資源或插件,從而產生“已關閉”異常。(Baeldung)

  2. Maven Wrapper 腳本或 jar 損壞
    如果項目中 .mvn/wrapper/maven-wrapper.jar 文件丟失、損壞或版本不匹配,執行 ./mvnw 時會讀取失敗并報出該錯誤。(javastreets.com)

  3. IDE 緩存異常
    IntelliJ 等 IDE 的緩存損壞,可能導致編譯輸出或依賴索引不一致,同樣會導致運行時讀取失敗。(JetBrains)

  4. pom.xml 中插件版本或配置不當
    Spring Boot Maven 插件(spring-boot-maven-plugin)如果版本與項目不兼容,或執行順序配置錯誤,也會導致無法正確 repackage/run。(Stack Overflow)


3. 詳細排查與解決步驟

下面按照從宏觀到微觀的思路,逐步排查并解決。

3.1 清理本地 Maven 倉庫并重新下載依賴

# 針對整個項目的所有依賴進行清理并重下載(不預先下載失效依賴)
mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=true

該命令會刪除本地倉庫中當前項目的所有依賴文件,然后重新從遠程倉庫拉取,解決因依賴損壞導致的 IO 錯誤。(Apache Maven, Baeldung)

或者,如果只希望手動刪除本地緩存,也可以直接:

# 危險操作:徹底刪除本地倉庫(請確保備份)
rm -rf ~/.m2/repository

3.2 刪除并重新下載 Spring Boot Maven 插件

有時僅是插件自身損壞,直接刪除對應目錄即可:

# 刪除本地緩存的 spring-boot-maven-plugin
rm -rf ~/.m2/repository/org/springframework/boot/spring-boot-maven-plugin
# 重新構建時會自動下載最新版本
mvn clean install

通過刪除插件并重新下載,解決了許多因插件包不完整導致的“處理失敗”問題。(Stack Overflow)


3.3 檢查并重裝 Maven Wrapper

確保項目根目錄下存在完整的 Maven Wrapper 配置:

# 在項目根目錄執行,生成或更新 .mvn/wrapper 相關文件
mvn wrapper:wrapper

之后使用腳本啟動:

# Linux/macOS
./mvnw clean package spring-boot:run
# Windows
mvnw.cmd clean package spring-boot:run

重新生成 Wrapper 可以修復損壞的腳本或缺失的 jar。(javastreets.com)


3.4 清理 IntelliJ IDEA 緩存并重啟

在 IDE 中執行:

  1. File → Invalidate Caches / Restart…
  2. 勾選 Clear file system cache and Local History,然后點擊 Invalidate and Restart

該操作會刪除所有項目的緩存索引,并在重啟后重建,常用于解決奇怪的運行/編譯異常。(JetBrains)


3.5 檢查 pom.xml 中插件配置

打開 pom.xml,確認插件配置類似如下:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.5</version> <!-- 根據項目實際版本填寫 --><executions><execution><goals><goal>repackage</goal><goal>run</goal></goals></execution></executions></plugin></plugins>
</build>
  1. 顯式指定插件版本,避免版本漂移導致兼容性問題。
  2. 確保 executions 塊中有 runrepackage 目標,否則使用命令行單獨調用時可能無法生效。(Stack Overflow)

4. 復測與驗證

完成上述所有步驟后,再次運行:

./mvnw clean package spring-boot:run

或在 IDEA 中點擊 Run,項目應能順利啟動,不再出現 java.io.IOException: closed 報錯。


5. 預防與最佳實踐

  1. CI/CD 中定期清理依賴:可在 CI 流水線中,定時執行

    mvn dependency:purge-local-repository -DactTransitively=false
    

    保證構建環境依賴干凈、可復現。(Intertech)

  2. 版本管理 Maven Wrapper:將 .mvn/wrapper 整目錄納入 SCM,確保團隊成員拿到時完整無誤。(javastreets.com)

  3. 固定插件與依賴版本:在 pom.xmlspring-boot-maven-pluginmaven-compiler-plugin 等都最好顯式指明版本,以免自動升級帶來未知風險。

  4. IDE 配置同步:結合項目中 .idea.editorconfig,統一團隊的 IDE 緩存、編譯輸出等設置,減少“我的機器能跑”現象。


通過以上多方面的排查與修復,基本可以一網打盡 “Error encountered while processing: java.io.IOException: closed” 這類棘手的啟動報錯。希望能幫助大家在遇到類似問題時快速定位、迅速恢復開發效率。

貓頭虎

粉絲福利


👉 更多信息:有任何疑問或者需要進一步探討的內容,歡迎點擊文末名片獲取更多信息。我是貓頭虎博主,期待與您的交流! 🦉💬
貓頭虎


聯系我與版權聲明 📩

  • 聯系方式
    • 微信: Libin9iOak
    • 公眾號: 貓頭虎技術團隊
  • 版權聲明
    本文為原創文章,版權歸作者所有。未經許可,禁止轉載。更多內容請訪問貓頭虎的博客首頁。

點擊???下方名片???,加入貓頭虎AI共創社群矩陣。一起探索科技的未來,共同成長。🚀

🔗 貓頭虎抱團AI共創社群 | 🔗 Go語言VIP專欄 | 🔗 GitHub 代碼倉庫 | 🔗 Go生態洞察專欄
? 貓頭虎精品博文

在這里插入圖片描述

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

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

相關文章

Kafka——多線程開發消費者實例

引言在分布式系統領域&#xff0c;Kafka憑借高吞吐量、低延遲的特性成為消息隊列的事實標準。隨著硬件技術的飛速發展&#xff0c;服務器多核CPU已成常態——一臺普通的云服務器動輒配備16核、32核甚至更多核心。然而&#xff0c;Kafka Java Consumer的設計卻長期保持著"單…

PDF 轉 HTML5 —— HTML5 填充圖形不支持 Even-Odd 奇偶規則?(第二部分)

這是關于該主題的第二部分。如果你還沒有閱讀第一部分&#xff0c;請先閱讀&#xff0c;以便理解“繞組規則”的問題。 快速回顧一下&#xff1a;HTML5 只支持 Non-Zero&#xff08;非零&#xff09;繞組規則&#xff0c;而 PDF 同時支持 Non-Zero 和 Even-Odd&#xff08;奇偶…

機器學習 KNN 算法,鳶尾花案例

目錄 一.機器學習概述 二.人工智能的兩大方向 三.KNN算法介紹 1.核心思想&#xff1a;“物以類聚&#xff0c;人以群分” 2.算法步驟 四.KNN算法實現 1.安裝scikit-learn庫 2.導入knn用于分類的類KNeighborsClassifier 3.設置KNeighborsClassifier的相關參數 4.訓練模…

強化學習(第三課第三周)

文章目錄強化學習&#xff08;第三課第三周&#xff09;一、以火星探測器為例說明強化學習的形式化表示二、強化學習中的回報三、強化學習算法的目標&#xff08;一&#xff09;馬爾可夫決策過程&#xff08;二&#xff09;狀態動作價值函數&#xff08;四&#xff09;使用Bell…

星痕共鳴數據分析2

今天實驗內容是攻擊力部分 1.思路 由于昨天數據分析出了一個函數 這個函數可以把奇怪的字節變成正常的數字 int parse_varint(unsigned const char* data, int count) {int value 0;int shift 0;for (int i 0; i < count; i) {unsigned char byte data[i];value | ((byt…

強化學習新發現:僅需更新5%參數的稀疏子網絡可達到全模型更新效果

摘要&#xff1a;強化學習&#xff08;RL&#xff09;已成為大語言模型&#xff08;LLM&#xff09;在完成預訓練后與復雜任務及人類偏好對齊的關鍵步驟。人們通常認為&#xff0c;要通過 RL 微調獲得新的行為&#xff0c;就必須更新模型的大部分參數。本研究對這一假設提出了挑…

electron 使用記錄

目錄 代理設置以打包成功 參考文檔 代理設置以打包成功 參考文檔 使用 JavaScript、HTML 和 CSS 構建跨平臺桌面應用 |電子 --- Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron

Spring boot Grafana優秀的監控模板

JVM (Micrometer) | Grafana Labs 1 SLS JVM監控大盤 | Grafana Labs Spring Boot 2.1 Statistics | Grafana Labs springboot granfana 監控接口指定接口響應的 在Spring Boot應用中&#xff0c;使用Grafana進行監控通常涉及以下幾個步驟&#xff1a; 設置Prometheus作…

LeetCode11~30題解

LeetCode11.盛水最多的容器&#xff1a; 題目描述&#xff1a; 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多的水。 返回容器…

計算機結構-邏輯門、存儲器、內存、加法器、鎖存器、程序計數器

邏輯門 邏輯門簡單地理解即通過特定的條件實現與、或、非、異或等相關邏輯二極管 這些最基礎的邏輯門都是通過電路元器件進行搭建的&#xff0c;即半導體材料搭建的二極管二極管有個特點&#xff0c;一定條件下才可以導通&#xff0c;即得接對正負極&#xff0c;具體的原理可以…

連鎖店鋪巡查二維碼的應用

在連鎖店鋪的運營管理中&#xff0c;巡查工作是保障各門店規范運作、提升服務質量的關鍵環節。巡查二維碼的出現&#xff0c;為這一環節帶來了高效、便捷且規范的解決方案&#xff0c;其應用場景廣泛&#xff0c;優勢顯著。在如今的繁雜且效果參差不齊電子二維碼市場中&#xf…

各種前端框架界面

前端技術更新迭代很快&#xff0c;已經有不少新的前端框架問世&#xff0c;而且像geeker-admin風格的界面設計也挺不錯的。 今天去面試了前端開發崗位&#xff0c;感覺希望不大。畢竟中間空了一段時間沒接觸&#xff0c;得趕緊把新的知識點補上&#xff0c;這樣哪怕是居家辦公也…

DApp 開發者 學習路線和規劃

目錄 ?? 一、學習路線圖 階段 1:基礎知識(1~2 周) 階段 2:智能合約開發(3~4 周) 階段 3:前端與區塊鏈交互(2~3 周) 階段 4:進階與生態系統(持續學習) ?? 二、學習規劃建議(3~4 個月) ?? 三、工具推薦 ?? 四、附加建議 ?? 一、學習路線圖 階段 …

數據結構 二叉樹(3)---層序遍歷二叉樹

在上篇文章中我們主要講了關于實現二叉樹的內容&#xff0c;包括遍歷二叉樹&#xff0c;以及統計二叉樹等內容。而在這篇文章中我們將詳細講解一下利用隊列的知識實現層序遍歷二叉樹。那么層序遍歷是什么&#xff1f;以及利用隊列遍歷二叉樹又是怎么遍歷的&#xff1f;下面讓我…

【橘子分布式】gRPC(番外篇-攔截器)

一、簡介 我們之前其實已經完成了關于grpc的一些基礎用法&#xff0c;實際上還有一些比較相對進階的使用方式。比如&#xff1a; 攔截器&#xff1a;包括客戶端和服務端的攔截器&#xff0c;進而在每一端都可以劃分為流式的攔截器和非流式的攔截器。和以前我們在spring web中的…

深入探索嵌入式仿真教學:以酒精測試儀實驗為例的高效學習實踐

引言&#xff1a;嵌入式技術普及下的教學革新 嵌入式系統作為現代科技的核心驅動力&#xff0c;其教學重要性日益凸顯。然而&#xff0c;傳統硬件實驗面臨設備成本高、維護難、時空受限等挑戰。如何突破這些瓶頸&#xff0c;實現高效、靈活、專業的嵌入式教學&#xff1f;本文將…

三種深度學習模型(GRU、CNN-GRU、貝葉斯優化的CNN-GRU/BO-CNN-GRU)對北半球光伏數據進行時間序列預測

代碼功能 該代碼實現了一個光伏發電量預測系統&#xff0c;采用三種深度學習模型&#xff08;GRU、CNN-GRU、貝葉斯優化的CNN-GRU/BO-CNN-GRU&#xff09;對北半球光伏數據進行時間序列預測對北半球光伏數據進行時間序列預測&#xff0c;并通過多維度評估指標和可視化對比模型性…

PostgreSQL對象權限管理

本文記述在postgreSQL中對用戶/角色操作庫、模式、表、序列、函數、存儲過程的權限管理針對數據庫的授權 授權&#xff1a;grant 權限 on database 數據庫 to 用戶/角色; 撤權&#xff1a;revoke 權限 on database 數據庫 from 用戶/角色; 針對模式的授權 授權&#xff1a;gran…

Wordpress主題配置

一、下載主題 主題下載地址&#xff1a;https://www.iztwp.com/tag/blog-theme 二、主題安裝 三、上傳主題安裝即可 四、安裝完成啟動主題

lock 和 synchronized 區別

1. 引言 在多線程編程中&#xff0c;我們經常需要確保某些代碼在同一時刻只由一個線程執行。這種機制通常叫做“互斥鎖”或“同步”。Java 提供了兩種主要的同步機制&#xff1a;synchronized 關鍵字和 Lock 接口。盡管它們的作用相似&#xff0c;都用于實現線程的同步&#xf…