Eclipse Tomcat 錯誤問題 May be locked by another process
Contents
這個錯誤一開始看起來很像是 Tomcat 被別的程序鎖住,但我自己實際踩下來,發現不一定真的是外部程序在卡你。有時候只是 Eclipse 背後還在做驗證或發佈動作,你太快 Publish,就把自己撞死了。
錯誤現象
大概會看到類似 May be locked by another process、檔案無法刪除、無法覆蓋部署目錄這類訊息。第一直覺通常會懷疑:
- Tomcat 沒關乾淨。
- 有其他 Java process 還在占用檔案。
- 防毒軟體正在掃描部署目錄。
這些方向不是錯,但我這次最後發現根因不是這些。
我一開始查的方向
參考資料都在講 Tomcat 工作目錄、部署目錄、暫存檔被鎖住:
- Tomcat报错,May be locked by another process._bingguang1993的博客-CSDN博客
- Eclipse每次修改檔案之後,tomcat要自動重新部署,就會報這個錯誤:May be locked by another process - IT閱讀
- 關於tomcat被鎖後 ,報錯could not delete的解決方法 | 程式前沿
我那時也照著清暫存、重開 Tomcat、Clean 專案去試,但效果都不穩。
我最後找到的真正卡點
後來才發現,Eclipse 在背景還在跑 Validating XML/JSP,這時如果我太快按 Publish,就很容易出現這類部署失敗。
也就是說,表面上像是檔案被別的程序鎖住,實際上可能是 Eclipse 自己的背景工作還沒跑完。
我的處理方式
我後來的流程是:
- 先 Clean 專案。
- 等 Eclipse 底下背景工作的
Validating XML/JSP跑完。 - 確認狀態列沒有忙碌中的工作。
- 再按 Publish 或重新啟動 Tomcat。
我這樣做之後,問題就比較穩定地消失了。
如果驗證真的太慢
XML 驗證真的很耗時間,尤其老專案一堆設定檔時更明顯。我後來有先參考這篇暫時關掉 XML 驗證:
Disable XML validation in Eclipse - Stack Overflow
我自己當時是先只關 XML,JSP 驗證沒有直接關掉,因為怕把真正的語法問題一起藏起來。
小提醒
- 如果是團隊共用專案,不要一開始就把所有 validation 全關掉。
- 先分清楚是作業系統層級鎖檔,還是 Eclipse 背景工作尚未完成。
- 如果每次都很慢,可以再往 workspace 效能、外掛衝突或專案設定過大去查。
小結
這個錯誤訊息本身有點誤導,因為它不一定真的代表有別的 process。在 Eclipse + Tomcat 的開發情境裡,先看背景驗證工作有沒有跑完,反而比一直重開伺服器更有效。