首页 文章

Tomcat和Eclipse Zero Turnaround部署

提问于
浏览
16

我希望能够将代码更改部署到Tomcat(即将发布),而我正在Eclipse中进行开发 .

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

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

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

我've read that I can add additional watched resources in Tomcat' s 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产品不感兴趣 . 任何答案都应该是 free 解决方案 .


Update

根据Tomcat documentation,应该通过将上下文设置为reloadable来监视classes文件夹:

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

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

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

docBase="webapps/someExample"

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

3 回答

  • 0

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

  • 2

    尝试我在以下答案中描述的Spring Loaded JVM代理:https://stackoverflow.com/a/37064672/1034436

    虽然这对我的Spring Web应用程序起作用,但这应该与vanilla Eclipse WTP Tomcat动态Web应用程序一起使用,因为Spring Loaded在JVM /类加载级别上工作 .

    你仍然需要使用@toomasr在他的回答中提到的"Automatically publish when resources changes" . However ,您还必须禁用"Module auto reload by default"选项 . 如果已经将Eclipse中的模块添加/发布到Tomcat,则为每个Web模块禁用"Auto Reload"(通过Tomcat配置页面的“模块”选项卡) . 这应该可以防止Tomcat在更新单个类文件时重新加载应用程序,我怀疑这是所有重新加载/等待的时间 .

  • 5

    对于这些情况,我将eclipse构建输出设置为WEB-INF / classes,并创建一个上下文文件,其中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" />
    

相关问题