6

概要

我正在尝试将 WAR 导出到我的 webapps 文件夹,但每次我更新它都会删除 webapp 减去 /WEB-INF/lib/struts.jar 的所有内容

系统信息

  • 视窗 2K3
  • 雄猫 5.5
  • JRE 1.6.23

好的,这就是正在发生的事情:

  1. 通过 Eclipse (Helios) 将项目导出为 .WAR 到 /webapps 目录
  2. Tomcat看到战争的变化并尝试重建webapp
  3. Tomcat 删除 webapp 文件夹的内容 ( /webapps/public )
  4. ( /webapps/public/WEB-INF/lib/struts.jar ) 被锁定以防止被删除。
  5. Tomcat 放弃了重建,除了导致应用程序中断的 struts.jar 之外,文件夹中什么都没有。

问题)

  • 有没有办法让罐子不被锁住?
  • (或)我应该使用更好的部署流程(并且可以快速上手)?

在元素上使用antiResourceLocking="true"and并没有解决问题。感谢任何帮助。antiJARLocking="true"<Context>

4

4 回答 4

4

添加unloadDelay到您的上下文有帮助吗?

哪一个是:

容器等待 servlet 卸载的毫秒数。如果未指定,则标志的默认值为 2000 毫秒。

来源:http: //tomcat.apache.org/tomcat-5.5-doc/config/context.html

显然,有时 Web 应用程序处于大型 GC 的中间/ClassLoader 没有被垃圾收集并且无法及时释放。尝试尝试超时,看看是否有帮助。

在 Windows 平台上还有一些奇怪的文件锁定的轶事证据。

另外,假设您指的是开发(而非生产)构建环境,请查看我的一个问题,展示我对 Tomcat / Eclipse 热部署环境的方法:

Tomcat 和 Eclipse 零周转部署


更新

这个有用的线程出现在对同一问题的 Google 搜索中,并被许多其他人引用:

http://blog.exis.com/colin/?s=I+Put+A+Spell+On+You

于 2011-06-15T13:57:06.983 回答
1

我想您的要求是快速部署和重建,因为 Eclipse 是您的 IDE。正如您已经发现将战争文件导出到 webapps 文件夹不是最好的选择。其他选项很少

a) 使用 sysdeo tomcat 插件 -- sysdeo 部署项目文件夹

b) 更新构建脚本以展开格式部署。-- 将 \build 文件夹部署为展开的应用程序

第一个选项是最简单的。第二种选择更清洁。

[OFF TOPIC] 考虑切换到tomcat 7

于 2011-06-10T14:01:29.050 回答
1

这个线程可能是相关的吗?引用了导致问题的 tiles-config.xml 中的 DTD。

于 2011-06-10T20:17:01.373 回答
0

这可能不是最佳解决方案,但我之前在 Tomcat 6 上遇到过类似的问题。当时我正在使用 Ant,所以我编写了一个 Ant 脚本,它将在本地部署到 Tomcat,并在此过程中在必要时停止/启动 Tomcat(Tomcat 被部署为服务,因此我可以使用NET STOP / NET START 命令) . 这包括删除旧的扩展 WAR 文件夹。

我认为可能有更好的选择,但这对我有用。

于 2011-06-15T13:43:47.753 回答