【问题标题】:tomcat 7 undeploy fails dues log4j.propertiestomcat 7取消部署失败会费log4j.properties
【发布时间】:2013-10-18 14:17:32
【问题描述】:

这个错误非常令人费解。在我的 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 下剩下的唯一文件是 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>

【问题讨论】:

  • Tomcat 存在一些文件锁定问题。我见过很多次,但我从未找到解决方案。
  • Tomcat 没有任何已知的文件锁定问题。许多第三方库确实存在问题,而 Tomcat 跳过了许多障碍来解决已知问题。解决方案是通过探查器确定文件上的锁定是什么,然后找出如何释放它。这可能需要针对库的错误报告以提供 shutdown() 类型方法。

标签: tomcat web-applications log4j undeploy


【解决方案1】:

那是因为打开文件进行读取。您至少需要关闭您的应用程序。这可以通过PsiProbe 轻松完成。

【讨论】:

  • 我停止然后取消部署。令人沮丧的部分是它有时有效,但不是大多数。
【解决方案2】:

确保在 ServletContextListener 的 contextDestroyed() 方法中调用 LogManager.shutdown()。这应该确保 log4j 没有打开文件。

【讨论】:

  • 这将是正确的做法,并且将是技术债务,现在有一个解决方法......
  • 我们有时会遇到这个问题。即使在 servlet 销毁方法中使用 .shutdown() 也会发生。
【解决方案3】:

这是我的解决方法:

我创建了另一个目标来将战争复制到 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">

这很好用。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 2012-03-01
    • 1970-01-01
    • 2014-01-03
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多