tomcat 7取消部署由于log4j.properties而失败
这个错误令人费解。在我的webapps中,根据建议,我在WEB-IF/classes中具有log4j.properties 当我从eclipse部署时,我在webapp上停止,取消部署,然后部署。奇怪的是,10次中有8次在取消部署时出现以下错误-tomcat 7取消部署由于log4j.properties而失败,tomcat,web-applications,log4j,undeploy,Tomcat,Web Applications,Log4j,Undeploy,这个错误令人费解。在我的webapps中,根据建议,我在WEB-IF/classes中具有log4j.properties 当我从eclipse部署时,我在webapp上停止,取消部署,然后部署。奇怪的是,10次中有8次在取消部署时出现以下错误- build.xml:526:FAIL-无法删除[C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\punch]。继续存在此文件可能会导致问题。 我的webapp下唯一剩下的文件
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>
这是因为文件已打开以供读取。你至少需要关闭你的应用程序。这可以很容易地使用。确保在ServletContextListener的contextDestroyed()方法中调用LogManager.shutdown()。这将确保log4j不会打开该文件。以下是我的解决方法:
我创建了另一个目标,将war复制到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">
这个很好用。感谢您的帮助。Tomcat有一些文件锁定问题。我已经见过很多次了,但是我从来没有找到解决方案。Tomcat没有任何已知的文件锁定问题。很多第三方库确实存在问题,Tomcat在可能的情况下会跨越许多障碍来解决已知的问题。解决方案是通过探查器识别文件上的锁所在,然后找出如何将其释放。这可能需要针对库的错误报告来提供shutdown()类型的方法。令人沮丧的是,它有时有效,但不是大多数。这将是正确的方法,将是技术债务,现在有一个解决办法…我们有时会遇到这个问题。即使使用servlet destroy方法中的.shutdown()也会发生这种情况。