Tomcat 和 Eclipse Zero Turnround 部署

2022-09-03 07:55:54

我希望能够在 Eclipse 中开发时(几乎立即)将代码更改部署到 Tomcat。

到目前为止,我有Eclipse的输出,将构建的类放在我的Web应用程序的文件夹中。WEB-INF/classes

我还有一个可重装的上下文,作为监视资源。任何编辑/保存到此文件都会重新加载我的Web应用程序,只需一秒钟多一点 - 比构建新的war文件并完全部署它要快得多。web.xml

但是,我想做的是在编辑任何源文件时触发重新部署。由于.class文件正在Tomcat中修改,似乎我只需要监视文件夹及其子级中的任何更改。WEB-INF/classes

我已经读到我可以在Tomcat中添加其他监视的资源,但这似乎不是我需要的 - 除非可以指定一个将被监视的目录(包括递归监视子文件夹和文件)?context.xml

<Context>
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <WatchedResource>WEB-INF/someother.file</WatchedResource>
  <Manager pathname=""/>
</Context>

所以从本质上讲,我的问题是,我是否可以监视整个类文件夹(不显式包含每个类)以触发Tomcat中的重新部署?WatchedResource

如果没有,我是否可以在项目中保存源文件时将 Eclipse 配置为 Web.xml文件?我正在Windows系统上开发。:(touch


PS 我对JRebel产品不感兴趣。任何答案都应该是一个免费的解决方案。


更新

根据 Tomcat 文档,应通过将上下文设置为可重装来监视类文件夹:

如果希望 Catalina 监视 /WEB-INF/classes/ 和 /WEB-INF/lib 中的类以进行更改,则设置为 true,并在检测到更改时自动重新加载 Web 应用程序。

只有对网络的更改.xml似乎才会触发重新加载。这是一个错误还是我的设置不正确?

另外,我还阅读了有关为给定上下文设置属性的信息:docBase

docBase="webapps/someExample"

这似乎接近我的需求,因为我可以快速在Eclipse中重新发布。我唯一的问题是,我需要几个Web应用程序/ servlet同时在Tomcat中运行,在同一端口上等。


答案 1

对于这些情况,我像您一样将 eclipse 构建输出设置为 WEB-INF/类,并创建一个上下文文件,其中 docBase 设置为项目中的 webapp 文件夹(WEB-INF 的父级)。这是手动放置在conf/Catalina/localhost中(假设服务器的某些元素的默认配置.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" />

答案 2

也许启用了自动重新部署的 Eclipse 的 Web 工具项目会对您有所帮助?添加服务器,打开属性,在“发布”下,您将看到一个单选按钮,上面写着“资源更改时自动发布”。如果类发生更改,这将导致重新部署,否则只会覆盖资源。您可以通过内置更新站点(仅限 Eclipse)安装 WTP,因此请查看您的软件更新。它对于大多数服务器都是免费的,但它不支持某些Websphere功能?


推荐