首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JavaMail NoClassDefFoundError: LineInputStream 根因與一鍵修復

     編輯:Java 綜合教學

JavaMail NoClassDefFoundError: LineInputStream 根因與一鍵修復

錯誤現象

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

根因分析

  • 項目引入了獨立的 javax.mail-api + javax.mail (RI 實現) JAR。
  • MyEclipse 內置 javaee.jar (Java EE 5 Library) **同樣包含** `com.sun.mail.util` 包。
  • 類加載器優先加載 javaee.jar 中**舊版本/殘缺**的類,導致缺少 LineInputStream。
  • **本質:同一包路徑下存在多個版本 JAR,類加載衝突。**

一鍵修復:從 javaee.jar 中移除 mail 包

  1. 定位文件:MyEclipse安裝目录/Common/plugins/com.genuitec.eclipse.j2eedt.core_版本/data/libraryset/EE_5/javaee.jar
  2. 用壓縮軟件(WinRAR/7-Zip)打開 javaee.jar。
  3. 刪除其中的 javax/mail/ 和 com/sun/mail/ 目錄。
  4. 保存 JAR,重啟 MyEclipse。

圖解步驟

打開 javaee.jar

刪除 mail 目錄

保存確認

完成

原理說明

  • MyEclipse 運行時將 javaee.jar 放入系統類加載器路徑,優先級高於項目 Classpath。
  • 移除內部 mail 包後,類加載器轉而加載項目提供的完整 javax.mail.jar。
  • 此法治標不治本,**根治方案**:升級 MyEclipse / 避免使用內置 Java EE Library / 改用 Maven/Gradle 管理依賴並設定 provided 作用域。

通用避坑清單

**核心原則:依賴管理交給構建工具,IDE 內置庫只作編譯參考,不參與運行。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
衝突場景典型錯誤解決思路
Servlet API 重複NoSuchMethodError: ServletContext.getContextPath排除容器自帶 servlet-api.jar,項目用 provided
JAXB 版本衝突ClassCastException: JAXBContextImpl統一版本,JDK 9+ 需額外引入 jaxb-api/impl
Logging 框架雙綁SLF4J: Class path contains multiple SLF4J bindings排除舊綁定,保留 logback-classic / log4j-slf4j-impl