我目前的項目是用Java編寫HTTP-Webserver。服務器每兩秒檢查一次「部署目錄」並搜索名爲content.jar
的文件。如果文件被更改,服務器就會部署它。該文件包含將由URLClassLoader
加載的servlet。在每個部署中都會創建一個新的類加載器。Web服務器部署問題
在另一個項目中,我的servlet正在開發中。我編寫了一個Ant構建文件,用於創建content.jar
文件並將其移動到服務器的部署目錄中。不幸的是,我得到一個Ant錯誤:
BUILD FAILED [path]\WebServerServlet\Ant\Build.xml:15: Unable to remove existing file [path]\WebServer\web\content.jar
我想,該文件被鎖定由JVM文件系統 - 是有沒有辦法告訴Ant它不應該嘗試刪除和移動文件,而是改爲將其覆蓋?
否則,有沒有人有一個想法如何通過更改我的部署系統來避免文件被JVM鎖定?
編輯
我現在已經找到了解決辦法! 在本question討論我不得不添加的唯一的事情就是
URLClassLoader loader = new URLClassLoader(..);
//class loading stuff here
loader.close() //the line all the trouble was about
有了這個附錄我的螞蟻構建文件能夠刪除部署目錄「舊」的罐子和移動新一成多吧。