java - Tomcat 和 Eclipse 零周转部署

标签 java eclipse tomcat eclipse-wtp hotdeploy

我希望能够在 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/

相关文章:

java - 如何使用 iReport 将参数传递给 JasperReport

Java 8 Stream map 调用字符串与组合成一个

java - Tomcat7 并行部署特性 : experiences using it on production servers?

java - Jackson 的 @JsonTypeInfo(use = Id.CUSTOM, include = As.PROPERTY, property = "type") 读取除了 "type"以外的所有 JSON 字段

java - 使用 ArrayList 创建 jTable

java - LibGdx - 安装Android项目

java - Eclipse 未打开,下载了 Eclipse ADT bundle

java - .java 和 ant 脚本中的版本号

jakarta-ee - Java EE、JDBC 和 Tomcat

javascript - 将 json 从 js 传递到 java 的 url 问题