我希望能够在 Eclipse 中开发时将代码更改部署到 Tomcat(几乎是即时的)。
到目前为止,我的 Eclipse 输出将构建的类放在我的 Web 应用程序的 WEB-INF/classes
文件夹中。
我还有一个可重新加载的上下文,将 web.xml
作为监视资源。对此文件的任何编辑/保存确实重新加载我的网络应用程序,只需要一秒多一点的时间——比构建一个新的 war 文件并完全部署它要快得多。
但是,我想做的是在我编辑任何源文件时触发重新部署。由于 .class 文件在 Tomcat 中被修改,看来我只需要监视 WEB-INF/classes
文件夹及其子文件夹中的任何更改。
我读到我可以在 Tomcat 的 context.xml
中添加额外的监视资源,但这似乎不是我所需要的——除非可以指定一个将被监视的目录(包括递归监控子文件夹和文件)?
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/someother.file</WatchedResource>
<Manager pathname=""/>
</Context>
所以本质上,我的问题是我能否监视整个类文件夹(不明确包括每个 WatchedResource
)以触发 Tomcat 中的重新部署?
如果没有,我是否可以将 Eclipse 配置为 touch
web.xml 文件,每当我在该项目中保存源文件时?我正在 Windows 系统上开发。 :(
PS 我对 JRebel 产品不感兴趣。任何答案都应该是免费解决方案。
更新
根据 Tomcat documentation ,应通过将上下文设置为可重新加载来监视类文件夹:
Set to true if you want Catalina to monitor classes in /WEB-INF/classes/ and /WEB-INF/lib for changes, and automatically reload the web application if a change is detected.
似乎只有对 web.xml 的更改才会触发重新加载。这是错误还是我的设置不正确?
此外,我还阅读了有关为给定上下文设置 docBase
属性的内容:
docBase="webapps/someExample"
这似乎接近我的需要,因为我可以在 Eclipse 中快速重新发布。我唯一的问题是我需要多个 Web 应用程序/servlet 在 Tomcat 中同时运行在同一个端口等。
最佳答案
对于这些情况,我像您所做的那样将 eclipse 构建输出设置为 WEB-INF/classes,并创建一个上下文文件,并将 docBase 设置为项目中的 webapp 文件夹(WEB-INF 的父文件夹)。这是手动放置在 conf/Catalina/localhost 中(假设 server.xml 的某些元素的默认配置)。最终结果是 tomcat 最终从开发目录提供服务。因此,更改一个 servlet 或其他类,它会更新到类文件夹中。保存一个 jsp,它立即可用。
如果项目结构如下:
src
|-main
|-webapp
|-images
|-js
|-WEB-INF
|-jsp
|-classes
那么上下文会是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/path" reloadable="true"
docBase="<pathtoproject>/src/main/webapp" />
关于java - Tomcat 和 Eclipse 零周转部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328604/