在Eclipse中进行开发时,我希望能够将代码更改部署到Tomcat(立即)。
到目前为止,我从Eclipse的输出中将已构建的类放置在WEB-INF/classesWeb应用程序的文件夹中。
WEB-INF/classes
我也有一个可重载的上下文,web.xml作为监视资源。任何编辑/保存到这个文件 并 重新加载我的Web应用程序,他仅用一秒多- 比建造新的战争文件,并在充分部署要快得多。
web.xml
但是,我想做的是在编辑任何源文件时触发重新部署。由于.class文件在Tomcat中被修改,看来我只需要监视WEB- INF/classes文件夹及其子文件夹中的所有更改。
WEB- INF/classes
我已经读到可以在Tomcat的资源中添加其他受监视的资源,context.xml但这似乎并不是我真正需要的资源- 除非可以指定要监视的目录(包括递归监视子文件夹和文件)?
context.xml
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>WEB-INF/someother.file</WatchedResource> <Manager pathname=""/> </Context>
因此,从本质上讲,我的问题是我可以监视整个类文件夹(不包含每个WatchedResource显式文件夹)以触发Tomcat中的重新部署吗?
WatchedResource
如果没有,touch每当我将源文件保存在该项目中时,是否可以将Eclipse配置为web.xml文件?我在Windows系统上进行开发。:(
touch
PS我对JRebel产品不感兴趣。任何答案都应该是 免费的 解决方案。
更新资料
根据Tomcat 文档,应该通过将上下文设置为可重载来监视classes文件夹:
如果您希望Catalina监视/ WEB-INF / classes /和/ WEB-INF / lib中的类是否有更改,请设置为true,并在检测到更改时自动重新加载Web应用程序。
仅对web.xml的更改似乎会触发重新加载。这是错误还是我的设置不正确?
另外,我已经阅读了有关docBase为给定上下文设置属性的信息:
docBase
docBase="webapps/someExample"
这似乎很接近我的需求,因为我可以很快在Eclipse中重新发布。我唯一的问题是,我需要在同一个端口上同时在Tomcat中同时运行多个Web应用程序/ Servlet。
对于这些情况,我将您的Eclipse构建输出设置为WEB-INF / classs,并在项目中创建一个docBase设置为webapp文件夹(WEB- INF的父级)的上下文文件。手动将其放置在conf / Catalina / localhost中(假设server.xml的某些元素具有默认配置)。最终结果是tomcat最终从开发目录中投放。因此,更改servlet或其他类,然后将其更新到classes文件夹。保存一个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" />