在 Eclipse 進行斷點調試時遇到「Source not found」是常見困擾。本文系統梳理核心原因與對應解決方案,助你快速恢復調試流程。
| 類別 | 典型場景 | 識別特徵 |
|---|---|---|
| 原始碼缺失 | 第三方庫無 Sources JAR、JDK 未安裝 Sources | 編輯器顯示「Source not found」且有「Attach Source」按鈕 |
| 原始碼與 Class 不一致 | 修改程式碼後未重新編譯、Auto Build 失效 | 行號錯位、變數值顯示異常、斷點無法命中 |
| 類別路徑配置錯誤 | 專案 Build Path 缺少 Source Folder、JRE 系統庫未綁定原始碼 | 專案內自身類別也找不到原始碼 |
| 遠端調試不匹配 | 遠端伺服器部署版本與本地原始碼版本不一致 | 本地調試正常,遠端調試出現 |
-sources.jar(Maven Central、官網、或 mvn dependency:sources)rt.jar → Source Attachment → External Filesrc.zip(如 C:\Program Files\Java\jdk1.8.0_202\src.zip)src/main/java、src/test/java 等在 Source Folders 列表中target/classes 或 bin)# 命令列執行,確保產生完整編譯產物 mvn clean compile # 或在 Eclipse 中 右鍵專案 → Run As → Maven install (skipTests) # 檢查 target 目錄 target/ ├── classes/ # 編譯後 .class 檔案 ├── generated-sources/ # 產生的原始碼 └── maven-status/ # 編譯狀態
mvn versions:set 統一版本號mvn clean package -DskipTests 確保乾淨構建在 Debug 視圖中,右鍵堆疊幀 → Drop to Frame 可回退到方法開頭重新執行,驗證原始碼同步性。
// 在程式碼中暫時加入 System.out.println(MyClass.class.getProtectionDomain().getCodeSource().getLocation()); // 輸出該類別實際載入的 JAR/目錄路徑
.metadata/.plugins/org.eclipse.jdt.core 目錄| 實踐 | 效果 |
|---|---|
Maven 專案啟用 mvn eclipse:eclipse 或使用 m2eclipse | 自動同步 Source Folder 與依賴 Sources |
| 團隊統一 JDK 版本並配置 src.zip | 避免 JDK 原始碼缺失 |
CI/CD 流水線強制 clean package | 確保部署產物與原始碼版本一致 |
| 使用 Spring Boot DevTools 熱部署 | 開發階段自動重編譯,減少不一致 |
定期 Project → Clean | 清理過時編譯產物 |
□ 1. 是否為第三方庫? → 下載 sources.jar → Attach Source □ 2. 是否為 JDK 類別? → 綁定 JDK 安裝目錄 src.zip □ 3. 專案自身類別? → Project → Clean → Maven Update Project □ 4. Source Folder 配置? → Properties → Java Build Path → Source □ 5. 遠端調試? → 確認版本一致 → 重新構建部署 □ 6. 仍無效? → 刪除 .metadata/.plugins/org.eclipse.jdt.core → 重啟
「Source not found」本質上是 執行時類別與開發時原始碼對應關係斷裂。掌握上述分類診斷邏輯,90% 情況可在 2 分鐘內定位並解決。建議團隊建立統一的開發環境配置文檔,新成員入職即可避開此類坑點。