Contents

Eclipse Tomcat 錯誤問題 May be locked by another process

這個錯誤一開始看起來很像是 Tomcat 被別的程序鎖住,但我自己實際踩下來,發現不一定真的是外部程序在卡你。有時候只是 Eclipse 背後還在做驗證或發佈動作,你太快 Publish,就把自己撞死了。

錯誤現象

大概會看到類似 May be locked by another process、檔案無法刪除、無法覆蓋部署目錄這類訊息。第一直覺通常會懷疑:

  1. Tomcat 沒關乾淨。
  2. 有其他 Java process 還在占用檔案。
  3. 防毒軟體正在掃描部署目錄。

這些方向不是錯,但我這次最後發現根因不是這些。

我一開始查的方向

參考資料都在講 Tomcat 工作目錄、部署目錄、暫存檔被鎖住:

我那時也照著清暫存、重開 Tomcat、Clean 專案去試,但效果都不穩。

我最後找到的真正卡點

後來才發現,Eclipse 在背景還在跑 Validating XML/JSP,這時如果我太快按 Publish,就很容易出現這類部署失敗。

也就是說,表面上像是檔案被別的程序鎖住,實際上可能是 Eclipse 自己的背景工作還沒跑完。

我的處理方式

我後來的流程是:

  1. 先 Clean 專案。
  2. 等 Eclipse 底下背景工作的 Validating XML/JSP 跑完。
  3. 確認狀態列沒有忙碌中的工作。
  4. 再按 Publish 或重新啟動 Tomcat。

我這樣做之後,問題就比較穩定地消失了。

如果驗證真的太慢

XML 驗證真的很耗時間,尤其老專案一堆設定檔時更明顯。我後來有先參考這篇暫時關掉 XML 驗證:

Disable XML validation in Eclipse - Stack Overflow

https://i.imgur.com/81m2gIt.png

我自己當時是先只關 XML,JSP 驗證沒有直接關掉,因為怕把真正的語法問題一起藏起來。

小提醒

  1. 如果是團隊共用專案,不要一開始就把所有 validation 全關掉。
  2. 先分清楚是作業系統層級鎖檔,還是 Eclipse 背景工作尚未完成。
  3. 如果每次都很慢,可以再往 workspace 效能、外掛衝突或專案設定過大去查。

小結

這個錯誤訊息本身有點誤導,因為它不一定真的代表有別的 process。在 Eclipse + Tomcat 的開發情境裡,先看背景驗證工作有沒有跑完,反而比一直重開伺服器更有效。