集成tomcat和eclipse作为热部署环境

我想以一种集成的方式来设置eclipse和tomcat,这样我的JSP和servlet(如果可能的话)的变化就可以直接反映出来,而不需要部署。

好吧,这是在互联网上有很多答案的问题之一,但它们看起来都不一样。 (使用Sysdeo插件,使用JBOss插件,做一个过时的Eclipse的东西,使用MyEclipse等),我找不到一个明确的资源来引用。 所以为了我的好处,最简单和最推荐的程序是什么?

这个假设我有eclipse和tomcat独立运行。 实际上我已经设法使用这里的说明以非热部署的方式来整合它们: http : //www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Eclipse版本:3.4.2(Ganymede)Tomcat v6.0.20

有两个选项。

首先,Eclipse可以让你做到这一点,只需要稍微改变一下configuration(另请参阅这篇详细的文章 )

  • 添加Tomcat到服务器列表
  • 使项目“dynamic网站项目”(通过创build向导或设置中的facet部分)
  • 将项目添加到tomcat,并configuration其“部署程序集”
  • 从列表中双击tomcat打开configuration
  • 将“发布”更改为“从不自动发布”(这意味着当您按Ctrl + s时服务器不会重新启动)
  • 以debugging模式启动tomcat

这仍将反映代码更改,但不会重新启动服务器。

其次,我已经使用FileSync插件很长一段时间了:

  • configuration插件将bin目录中的所有类发送到tomcat安装的WEB-INF/classes (这几乎与configuration部署程序集相同)
  • configuration所有其他资源去他们各自的位置
  • 可选地,将文件同步位置设置中的所有绝对path外部化为单个variables,并在eclipse中configuration该variables(因此如果所有成员都使用eclipse,则也可以提交文件同步设置)
  • 添加Tomcat到eclipse中的Servers列表中,将“Server locations”选项configuration为“Use tomcat installation”(当您从服务器列表中双击tomcat时,屏幕将会打开)
  • 以debugging模式启动tomcat

这对我来说是完美的。 每一个非结构性变化都立即反映出来,而不用重新部署。

更新:
您可以在这里阅读更多有关热部署的方法 。
我还创build了一个项目 ,轻松地将工作区与servlet容器同步。

只需让eclipse直接将类文件写入$ TOMCAT / webapps / MyWebApp / WEB_INF / classes目录即可。 然后,configurationapache-tomcat来检查类文件是否已经更新,如果有,就重新加载它们。

要configurationtomcat自动重新加载一个类,当它改变时,你需要

编辑$TOMCAT/conf/context.xml并设置:

 <Context reloadable="true"> 

您可能还必须编辑并重新加载您的webapps/$YourWebApp/web.xml文件,其中包括:

 <web-app reloadable="true"> 

我不记得是否需要这两个更改,但这就是我configuration我的tomcat-6.0.18自动重新加载。

免责声明 :我只是一个快乐的客户,我不工作零转换,我不以任何方式隶属于他们。

查看JRebel – 它允许您在没有重新启动Web应用程序的情况下进行编码。 它基本上是通过检测你的类和适应它们的变化来工作的。 它比热部署处理更多的情况 ,包括:

  • 添加/删除方法
  • 添加/删除构造函数
  • 改变接口
  • 添加/删除实现的接口

这是商业的 ( 定价细节 ,目前每年365美元),它有很多第三方框架的插件 ,包括:

  • 吉斯
  • 弹簧
  • Struts 2

你可以非常轻松地免费试用 – 我build议你试试看。 它甚至可以免费用于开发OSS (单击右侧的应用)。

在Eclipse中将您的工作区更改为\ tomcat \ webapps因为这只是为了您的工作,所以应该可以正常工作。 无论你在Eclipse中做出什么样的改变,tomcat都会寻找应用程序来部署

在服务器视图中,创build一个新的服务器,不要将任何资源(项目)添加到服务器。 双击服务器位置的服务器。 select“使用tomcat安装”。 修改“部署path”到tomcat部署目录(例如:c:\ server \ Tomcat 7.0.14 \ webapps)。 延长“发布部分”。 选中“生成事件后自动发布”。 保存并closures。 从eclipse菜单中select“Project – > Build自动”。 从服务器视图,右键单击您的服务器,“添加和删除”,发布您的项目。

为什么不在eclipse中使用集成的tomcat服务器,如果这只是为了开发? 您可以在window-> preferences中configuration服务器。 一旦它被configuration,如果你有一个名为page.jsp的jsp,你可以右键单击它并select在服务器上运行。 在首选项 – >一般 – > Web浏览器下,您可以select天气来使用内置浏览器或外部浏览器。 对jsp进行一些更改,保存并从浏览器中刷新页面。 保存并刷新浏览器后,更改将自动反映出来。

这里适合我的是:

context.xml如下所示:

 <Context path="/myapp" docBase="myapp" debug="5" reloadable="false" antiResourceLocking="false" antiJARLocking="true"> <!-- this because i´m using Spring 3.1 with Tomcat --> <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" /> </Context> 

然后,在Eclipse中的Servers选项卡上,在“Modules”选项卡上,禁用了正在部署的所有模块的“Auto Reload”。

也让默认configuration让自动发布。

而且使用的是WTP的Maven,不要忘了把src / main / resources的内容留在里面,因为Eclipse坚持排除这个文件夹的最终内容。

只有这一切,我才能完成(虚拟机)类热部署资源热部署!

在您的开发环境中,只需指向Tomcat服务器即可在您开发的任何目录中查找JSP。只要保存文件,就可以看到更改。

您是否打算使用Jetty进行开发?

如果是这样,使用Maven非常简单 – 只需运行mvn jetty:run

这可能不是最好的方法,但它适用于我。

  • $的tomcat / conf目录/卡塔利娜/本地主机/ .XML
  • $的contextPath / web应用/networking/ WEB-INF / lib目录/ *。JAR
  • $的contextPath / web应用/networking/
  • $ eclispeWorkbench /项目的servlet / src目录/
  • $ eclispeWorkbench / project-servlet / servlet.jardesc(应该将jar导出到$ contextPath中的lib目录)
  • $ eclipseWorkbench /项目JSP /

我使用rsync命令来同步从我的jsp项目到$ contextPath的变化。

在Tomcat中使用远程debugging,这将允许有限的代码热插拔。 如果您更改静态字段或添加方法,则需要导出jar并重新启动上下文。

我们可以使用下面的选项吗? 双击eclipse中的服务器 – >服务器位置 – >使用tomcat安装。 它需要控制tomcat的安装。 您不需要重新启动服务器以查看Java类中的更改。

我find了一个最简单的方法:使用符号链接:我认为这是最快的方法,因为根本没有同步:tomcat目录和你的项目目录始终是同一个目录。

Tomcat将定期检测更改并重新部署您的应用程序。

还有一种方法来debugging你的应用程序,所以我谦虚地认为是一个很好的解决scheme。

我已经在这里logging了我的解决scheme,感兴趣的人。

万一,你很急:

  1. 在eclipse中的tomcat(其他容器)中select“从不自动发布”。
  2. 在debugging模式下启动tomcat(其他容器)。

瞧! 🙂

我已经设法使用Spring Loaded JVM代理来开发我的开发环境。 虽然我开发Spring Web应用程序,但是该项目的描述确实提到了它

可用于任何可能在JVM上运行的字节码

使用以下设置,我可以获取更改以自动发布到附加的Tomcat实例(通常的Eclipse WTP方法)。 我使用基于Eclipse Mars.2(4.5.2)的Spring Tool Suite 3.7.3。

  1. 从Github项目下载Spring Loaded的最新版JAR。 这已经用springloaded-1.2.5.RELEASE.jar进行了testing。
  2. 正常情况下在Eclipse中设置Tomcat服务器(使用Tomcat 8.0.30进行testing)
  3. 在Eclipse中打开Tomcat服务器的configuration页面(双击“服务器”选项卡中的服务器实例)。
  4. 在“服务器选项”部分,取消选中“模块默认自动重新加载”。
    • 注意:如果您已将Web模块添加到服务器,则可能需要通过“模块”选项卡(configuration页面窗口底部)单独禁用“自动重新加载”。
  5. 在“常规信息”部分中,单击“打开启动configuration”
    • 在“参数”选项卡中,将以下内容添加到“VM参数”的末尾: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • 除了项目的.class文件以外,还要监视JAR,根据这个问题的注释configuration-Dspringloaded=watchJars= VM参数。

照常启动服务器并发布Dynamic Web Application项目。 再次,我能够用Spring Web应用程序来testing这个。 例如,在保存文件后,几乎立即应用@Controller类中的修改代码,添加/减去方法等,Eclipse构build并发布更改后的类。 最后,Spring Loaded项目的FAQ部分提到了一些事情不会重新加载的情况,所以需要重新启动服务器/应用程序。 但是这些例外情况要less得多。

还有一点需要注意:这不适用于STS附带的embedded式Pivotal tc服务器或VMware vFabric tc服务器。 对于这些服务器,有一个“启用基于Java代理的重新加载(实验)”选项,但使用Spring Loaded的较旧的1.2.0版本,这对我不起作用。

在Eclipse中,点击顶部菜单中的Project,并确保select“Build Automatically”。 这解决了我的问题。 我使用工作区元数据与Tomcat一起运行Eclipse。 我还在Dynamic Web Module项目中运行Maven。 要validation,请将您的应用程序添加到Tomcat。 在Eclipse中启动Tomcat。 确保您的应用程序已部署并正在运行。 在Eclipse中打开“控制台”选项卡。 在您的应用程序中进行更改。 几秒钟后,您应该看到您的更改会自动生成并部署到Tomcat。

最简单,最快捷:将Eclipse设置为在生成时生成WAR文件; 作为构build后的步骤,将该WAR文件复制到您的tomcat webapps目录中。 Tomcat将认识到更改并刷新网站,不需要部署。 请注意,这并不完美。 使用该webapp的用户可能有一个不太理想的经验,因为Tomcat重新启动“下”的web应用程序; 但是这符合你的要求。