執行 SVN Update 後,JSP 頁面拋出 `java.lang.NullPointerException`,且堆疊追蹤指向 JSP 編譯後的 Servlet 類。這通常是 **SVN 衝突標記 (`<<<<<<<`, `=======`, `>>>>>>>`) 殘留在 JSP/Java 檔中**,或 **編譯產物與原始碼不同步** 導致。
| 現象 | 根因 |
|---|---|
| JSP 行號報錯,原始碼看似正常 | 衝突標記藏在 EL 表達式/Scriptlet 中,編譯時產生語法錯誤但運行時才拋 NPE |
| Java 檔編譯通過,運行報 NPE | SVN 合併導致關鍵欄位初始化代碼被誤刪/註解 |
| 清理專案後恢復正常 | 舊編譯產物 (`.class`、JSP 編譯 Servlet) 與新原始碼不一致 |
# 命令列檢查衝突
svn status | grep ^C
# 或 IDE (IDEA/Eclipse) → Version Control → Conflicts
# 衝突檔案會包含標記:
<<<<<<< .mine
${user.name}
=======
${user.username}
>>>>>>> .r12345
# 必須手動編輯保留正確版本,然後
svn resolved 檔案路徑
# Maven 專案
mvn clean compile war:war
# 或 IDE 操作:
# IDEA: Build → Clean Project → Rebuild Project
# Eclipse: Project → Clean → 勾選專案 → Clean
# 同時清理 Tomcat 工作目錄:
# 刪除 $CATALINA_HOME/work/Catalina/localhost/專案名/
# 1. 刪除本地專案重新 checkout 乾淨副本
svn co 新目錄
cd 新目錄
mvn clean package -DskipTests
# 2. 部署產出的 WAR,若正常 → 本地工作副本受損,拋棄重來最快
SVN 更新後 JSP 報 NPE,**首查衝突標記殘留、次查編譯產物不同步**。遵循「更新 → 解決衝突 → 清理重建 → 驗證」標準流程,配合 CI 強制乾淨建構,可將此類問題壓縮至分鐘級解決。