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

Tomcat 啟動報錯「class file editor source not found」與 jar 衝突排查全過程

     編輯:程式設計綜合問答

錯誤現象

信息: validateJarFile(...\WEB-INF\lib\javaee_no_persistence.jar) - jar not loaded. 
Offending class: javax/servlet/Servlet.class
Action: List userList = userService.getUserList(); 執行報:class file editor source not found

根因分析

  1. Servlet API 重複加載:Tomcat lib/servlet-api.jar 已提供 javax.servlet.*,專案 WEB-INF/lib 下再放 javaee_no_persistence.jar (含 Servlet API) → 類加載器拒絕加載 Webapp 類加載器中的 Servlet 類,導致運行時找不到類定義/源碼。
  2. 缺少源碼附件:Eclipse 提示 "Class File Editor Source not found" 是因為調試時找不到對應 .java 源文件,非運行錯誤,但反映依賴管理混亂。

解決步驟

  1. 刪除衝突 Jar:從 WEB-INF/lib 移除 javaee_no_persistence.jar、servlet-api.jar、jsp-api.jar 等容器已提供的 API 包。
  2. Maven/Gradle 依賴範圍設為 provided:
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope> <!-- 關鍵:編譯用,不打包 -->
    </dependency>
    
  3. 清理並重新部署:mvn clean package,刪除 Tomcat work/Catalina/localhost/<app>、wtpwebapps 緩存,重新啟動。
  4. 附加源碼 (可選):Eclipse 右鍵專案 → Properties → Java Build Path → Libraries → 展開 Servlet API Jar → Source Attachment → External File → 選擇 servlet-api-sources.jar。

驗證清單

  • ✅ WEB-INF/lib 無 servlet-api*.jar, jsp-api*.jar, javaee*.jar。
  • ✅ mvn dependency:tree 無 compile 範圍的 Servlet API 依賴。
  • ✅ Tomcat 啟動日誌無 validateJarFile ... jar not loaded 警告。
  • ✅ 斷點進入 Service/DAO 方法,變量面板正常顯示值。

延伸:其他常見「Class File Editor Source not found」原因

原因現象解決
JDK 與項目編譯版本不匹配 斷點行號偏移、變量顯示錯誤 Project Facets / Compiler compliance 統一設置
類文件被多處編譯輸出 斷點不生效、提示多個源碼位置 清理 target/classes、.metadata/.plugins/org.eclipse.wst.server.core/tmp0
缺少 Lombok/MapStruct 生成代碼源碼 調試進入 .class 而非 .java 安裝 Lombok 插件、啟用注解處理器
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved