2013-10-10 43 views
1

這個錯誤相當令人費解。在我的webapps中,根據建議我在WEB-IF/classes中有log4j.properties。tomcat 7 undeploy失敗會費log4j.properties

當我從eclipse進行部署時,我停止了webapp,取消部署,然後部署。奇怪的是,10次中有8次在undeploy上出現以下錯誤 -
build.xml:526:FAIL - 無法刪除[C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ webapps \ punch]。該文件的繼續存在可能會導致問題。

我的webapp中剩下的唯一文件是WEB-INF/classes/log4j.properties。其他一切都被刪除。

我無法手動刪除文件或webapp文件夾。我必須停止Tomcat服務,刪除文件夾然後重新啓動。

有沒有解決方案?

謝謝。

這裏是build.xml文件

<target name="remove" 
description="Remove application on servlet container"> 

<stop url="${manager.url}" 
    username="${manager.username}" 
    password="${manager.password}" 
     path="${app.path}"/> 

<undeploy url="${manager.url}" 
    username="${manager.username}" 
    password="${manager.password}" 
     path="${app.path}"/> 

</target> 
+0

Tomcat有一些文件鎖定問題。我見過很多次,但我從來沒有找到解決方案。 –

+0

Tomcat沒有任何已知的文件鎖定問題。大量的第三方庫確實存在問題,Tomcat通過一系列的環節來解決已知問題。解決方案是通過分析器確定文件上的鎖是什麼,然後找出如何讓它釋放。這可能需要針對庫的錯誤報告來提供shutdown()類型的方法。 –

回答

0

這是因爲該文件被打開閱讀我的刪除任務。您至少需要關閉您的應用程序。這可以通過PsiProbe輕鬆完成。

+0

我停下來然後取消部署。令人沮喪的是,它可以工作一些,但不是最多的。 – user2754571

0

請確保您在ServletContextListener的contextDestroyed()方法中調用LogManager.shutdown()。這應該確保log4j沒有打開文件。

+0

這將是正確的方式來做到這一點,將是技術債務,現在有一個解決方法... – user2754571

+0

有時我們有這個問題。即使使用servlet銷燬方法中的.shutdown()也會發生。 – Tommy

0

這裏是我的解決辦法:

我創造了另一個目標複製戰爭到Tomcat的webapp目錄。

<target name="copywar" depends="dist"> 
    <copy file="${dist.home}/${app.name}.war" todir="${catalina.home}/webapps" /> 
</target> 

我還相信,Tomcat的可能與此server.xml中

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 

這只是正常調動。感謝您的幫助。

相關問題