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

时间:2009-06-15 22:23:10

标签: java eclipse tomcat

我想以集成的方式设置eclipse和tomcat,以便在不需要部署的情况下立即反映对我的JSP和servlet的更改(如果可能)。

好的,这是其中一个在互联网上有很多答案的问题,但它们看起来都不一样。 (使用Sysdeo插件,使用JBOss插件,使用过时的Eclipse执行操作,使用MyEclipse等等)并且我找不到1个确定的资源来引用。所以为了我的利益,最简单和最推荐的程序是什么?

这假设我有eclipse和tomcat独立运行。我实际上已经设法使用以下指令以非热部署方式集成它们: http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

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

16 个答案:

答案 0 :(得分:73)

有两种选择。

首先,Eclipse允许您执行此操作,只需略微更改配置(另请参阅此detailed post

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

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

其次,我长期使用FileSync plugin

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

这样对我来说非常合适。每次非结构性变化都会立即反映出来,无需重新部署。

<强>更新
您可以阅读有关methods for hot-deploying here的更多信息 我也created a project可以轻松地将工作区与servlet容器同步。

答案 1 :(得分:29)

只需让eclipse将类文件直接写入$ TOMCAT / webapps / MyWebApp / WEB_INF / classes目录。然后,配置apache-tomcat以检查类文件是否已更新,如果有,则重新加载它们。

要将tomcat配置为在更改时自动重新加载类,您需要

修改$TOMCAT/conf/context.xml并设置:

<Context reloadable="true"> 

您可能还需要编辑并重新加载webapps/$YourWebApp/web.xml文件并包含:

<web-app reloadable="true">

我不记得是否需要进行这两项更改,但这是我配置的方式 我的tomcat-6.0.18自动重装。

答案 2 :(得分:8)

免责声明:我只是一个快乐的客户,我不为Zero Turnaround工作,我与他们没有任何关系。

签出JRebel - 它允许您在没有重新启动Web应用程序的情况下进行编码。它基本上可以通过检测您的类并调整其更改来实现。它处理many more cases than hot deploy,包括:

  • 添加/删除方法
  • 添加/删除构造函数
  • 更改界面
  • 添加/删除已实施的接口

截至2018年6月,它是commercial,(pricing details,550美元/年),第三方框架有很多plugins,包括:

  • 吉斯
  • 弹簧
  • Struts 2

你很轻松地获得free trial - 我建议你试一试。

答案 3 :(得分:3)

将Eclipse中的工作区更改为\ tomcat \ webapps 因为它只是为了你的工作,这应该工作正常。无论您在Eclipse中做出哪些更改,都在同一目录中,tomcat会查找要部署的应用程序

答案 4 :(得分:3)

在服务器视图中,创建一个新服务器,不要向服务器添加任何资源(项目)。 双击服务器位置的服务器。 选择“使用tomcat安装”。 修改“部署路径”到tomcat部署目录(例如:c:\ server \ Tomcat 7.0.14 \ webapps)。 扩展“出版部分”。 选中“构建事件后自动发布”。 保存并关闭。 从日食菜单中选中“项目 - &gt;自动构建”。 在服务器视图中,右键单击您的服务器,“添加和删除”,发布项目。

答案 5 :(得分:2)

如果只是用于开发,为什么不在eclipse中使用集成的tomcat服务器?您可以在window-&gt;首选项下配置服务器。如果你有一个名为page.jsp的jsp,你可以右键单击它并选择在服务器上运行。在偏好设置 - &gt; general-&gt; Web浏览器下,您可以选择天气以使用内置浏览器或外部浏览器。对您的jsp进行一些更改,保存并从浏览器刷新页面。保存并刷新浏览器后,将自动反映更改。

答案 6 :(得分:2)

这对我有用的是:

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”到所有正在部署的模块。

也让默认配置让自动发布。

并且正在使用Maven和WTP,不要忘记保留src / main / resources的内容,因为Eclipse坚持要排除最终构建的这个文件夹的内容。

只有这一切,我才能通过资源热部署来完全(VM)类热部署!!!

答案 7 :(得分:1)

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

答案 8 :(得分:0)

您是否愿意将Jetty用于开发目的?

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

即可

答案 9 :(得分:0)

这可能不是最好的方式,但它对我有用。

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

我使用rsync命令将我的jsp项目中的更改同步到$ contextPath。

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

答案 10 :(得分:0)

我们可以使用以下选项吗? 双击eclipse中的Server - &gt;服务器位置 - &gt;使用tomcat安装。 它控制着tomcat的安装。 您不需要重新启动服务器以获取java类中的更改。

答案 11 :(得分:0)

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

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

还有一种调试应用程序的方法,所以我谦虚地认为这是一个很好的解决方案。

我已经为所有感兴趣的人记录了我的解决方案here

答案 12 :(得分:0)

万一,你匆忙:

  1. 检查&#34;永远不会自动发布&#34;在日食中的tomcat(其他容器)。
  2. 以调试模式启动tomcat(其他容器)。
  3. 瞧! :)

答案 13 :(得分:0)

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

  

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

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

  1. Github project下载最新版本的Spring Loaded JAR。这已经使用springloaded-1.2.5.RELEASE.jar进行了测试。
  2. 正常在Eclipse中设置Tomcat服务器(使用Tomcat 8.0.30测试)
  3. 在Eclipse中打开Tomcat服务器的配置页面(双击“Servers”选项卡中的服务器实例)。
  4. 在“服务器选项”部分中,取消选中“模块默认情况下自动重新加载”。
    • 注意:如果您已经将Web模块添加到服务器,则可能需要通过“模块”选项卡(在配置页面窗口的底部)单独禁用“自动重新加载”。
  5. 在“常规信息”部分中,点击“打开启动配置”
    • 在“参数”标签中,将以下内容添加到“VM参数”的末尾:step == 10
    • 要启用除项目的-javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify文件之外的JAR,请按this issue's comments配置.class VM参数。
  6. 启动服务器并像往常一样将Dynamic Web Application项目发布到它。再次,我能够使用Spring Web应用程序对此进行测试。例如,在保存文件和Eclipse构建并发布更改的类之后,几乎立即应用修改代码,在@Controller类中添加/减去方法等。最后,Spring Loaded项目的FAQ部分确实提到了一些不会重新加载的情况,因此需要重新启动服务器/应用程序。但这些例外情况要少得多。

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

答案 14 :(得分:0)

在Eclipse中,单击顶部菜单中的Project,确保选中“Build Automatically”。这解决了我的问题。我使用我的工作区元数据在Tomcat上运行Eclipse。我还在动态Web模块项目中运行Maven。要验证,请将您的应用程序添加到Tomcat。从Eclipse中启动Tomcat。确保您的应用程序已部署并正在运行。在Eclipse中打开Console选项卡。在您的应用程序中进行更改。几秒钟后,您应该会看到您的更改自动构建并部署到Tomcat。

答案 15 :(得分:-2)

最简单,最快:在构建时将Eclipse设置为生成WAR文件;作为构建后步骤,将该WAR文件复制到tomcat webapps目录中。 Tomcat将识别更改并刷新站点,无需部署。请注意,这并不完美;使用该webapp的用户可能会获得不太理想的体验,因为Tomcat会在“下”重新启动webapp;但这确实符合你的要求。