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


88

我想以集成方式设置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


17
4年后,我仍然感到困惑,这仍然是一个问题。来吧,这是非常基本的。
Konrad Garus 2013年

7年后(几乎),我想我已经找到了解决方案: stackoverflow.com/a/37064672/1034436
martian111 '16

Answers:


75

有两种选择。

首先,Eclipse使您可以执行此操作,只需稍稍更改配置即可(另请参见此详细信息

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

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

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

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

这样对我来说效果很好。每个非结构性更改都会立即反映出来,而无需重新部署。

更新:
您可以在此处阅读有关热部署方法的更多信息。
我还创建了一个项目该项目可以轻松地将工作空间与servlet容器同步。


@VladimirTsvetkov不-这是两个单独的选项
Bozho 2012年

我正在尝试您的第一种方法,但是我正在使用Maven叠加层,当我在其中一个叠加层中更改文件时,服务器仍会重新启动(该叠加层不是动态Web项目,而是动态Web模块)。有任何想法吗?
霍夫曼

2
我的印象是,通过将“发布”更改为“从不自动发布”,更改后不再重新加载/重新编译JSP。尽管可以通过在调试模式下启动Tomcat来使类重载部分正常工作。
yglodt 2014年

5
我用另一种方式来做:首先,更改为自动发布;其次,单击Modules服务器配置中的选项卡,然后单击edit,取消选中auto deploy enabled,我认为这是最简单的方法。PS:您的第一种方法对我不起作用。
海汇

@hiway,服务器配置选项卡中的“模块”选项卡在哪里?
Mateus Viccari 2014年

30

只需让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配置为自动重新加载的方式。


根据文档tomcat.apache.org/tomcat-6.0-doc/config/context.html,他们建议不要Context在server.xml文件中放置元素,但是它应该监视/ WEB-INF / classes /和/ WEB-INF / lib进行任何更改。您从哪里了解有关web-app元素的属性的?
迈克尔(Michael

抱歉,误读了您的答案。context.xml“应该为每个Web应用程序加载”。
迈克尔(Michael

2
您如何配置Eclipse将类文件写入的位置?
yglodt 2014年

7

免责声明:我只是一个快乐的客户,我不为零周转服务,也不以任何方式隶属于他们。

JRebel-它使您无需重新启动Web应用程序即可进行编码。它基本上是通过检测您的类并适应其更改来工作的。它比热部署处理更多的情况,包括:

  • 添加/删除方法
  • 添加/删除构造函数
  • 变更介面
  • 添加/删除已实现的接口

它是商业性的价格详细信息,截至2018年6月为550美元/年),并且具有许多用于第三方框架的插件,包括:

  • 吉斯
  • 弹簧
  • 支柱2

您可以非常轻松地获得免费试用 -我建议您试试看。


2
Jrebel,当它起作用时,它起作用。如果没有,那就是一场噩梦。一个多星期以来,我一直在他们的支持下be头,但我仍然无法在简单的Spring MVC安装程序中使用它。如果没有我将其发送给我的应用程序或我的应用程序的世界,他们将无济于事。而且,您的价格已过时-他们现在在炸弹。感谢上帝,我只使用了他们的试用版
happybuddha 2014年

当前价格为$ 365 /年/位子
Joseph Lust

而现在,它的价格为每年550美元/座
骗子

3

在Eclipse中将您的工作区更改为\ tomcat \ webapps,因为它仅用于您的工作,所以应该可以正常工作。无论您在Eclipse中进行什么更改,tomcat都在同一目录中寻找要部署的应用程序


3

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


2

如果仅用于开发,为什么不在eclipse中使用集成的tomcat服务器?您可以在window-> preferences下配置服务器。如果配置了一个名为page.jsp的jsp,则可以对其进行右键单击,然后选择“在服务器上运行”。在首选项->常规-> Web浏览器下,您可以选择天气以使用内置浏览器或外部浏览器。对jsp进行一些更改,保存并从浏览器刷新页面。保存并刷新浏览器后,更改将自动反映出来。


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的“服务器”选项卡上的“模块”选项卡上,我禁用了“自动重新加载”到正在部署的所有模块。

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

并且正在将Maven与WTP一起使用,请不要忘记将src / main / resources的内容保留在其中,因为Eclipse坚持要排除最终版本中该文件夹的内容。

只有这一切,我才能使用资源热部署来进行完整(VM)类热部署!!!


1

在您的开发环境中,只需将Tomcat服务器指向要在其中进行开发的目录中查找JSP。保存文件后,您便可以立即看到更改。


1

我已经设法使用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进行了测试。
  2. 照常在Eclipse中设置Tomcat服务器(已通过Tomcat 8.0.30测试)
  3. 在Eclipse中打开Tomcat服务器的配置页面(在“服务器”选项卡中双击服务器实例)。
  4. 在“服务器选项”部分中,取消选中“默认情况下模块自动重新加载”。
    • 注意:如果已经将Web模块添加到服务器,则可能需要通过“模块”选项卡(位于配置页面窗口底部)分别禁用它们上的“自动重新加载”。
  5. 在“常规信息”部分,单击“打开启动配置”
    • 在“参数”选项卡中,将以下内容添加到“ VM参数”的末尾: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • 要使除项目.class文件外还可以监视JAR,请-Dspringloaded=watchJars=根据此问题的注释配置VM参数。

启动服务器,然后像往常一样将Dynamic Web Application项目发布到该服务器。同样,我能够使用Spring Web应用程序进行测试。例如,在我保存文件,Eclipse构建并发布更改后的类后,@ Controller类中的修改代码,添加/减去方法等几乎立即应用。最后,Spring Loaded项目的FAQ部分确实提到了一些情况,这些情况不会重新加载,因此需要重新启动服务器/应用程序。但是这些例外的发生频率要低得多。

另外请注意:这不适用于STS附带的嵌入式Pivotal tc Server或VMware vFabric tc Server。对于这些服务器,有一个“启用基于Java代理的重新加载(实验性)”选项,但是使用的是Spring Loaded的1.2.0早期版本,这对我不起作用。


看来您必须接受SpringNon Spring应用程序怎么样。
探戈

尽管您需要为Tomcat配置SpringLoaded JAR,但是正在运行的应用程序本身不必是Spring应用程序(也不包含任何Spring JAR)。我用一个简单的单一HelloWorld Servlet成功地测试了这一点。
martian111


0

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

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *。jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc(应将jar导出到$ contextPath中的lib目录)
  • $ eclipseWorkbench / project-jsp /

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

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


0

我们可以使用以下选项吗?双击Eclipse中的服务器->服务器位置->使用tomcat安装。它控制了tomcat的安装。您无需重新启动服务器即可更改Java类。


0

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

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

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

我已经在这里记录了我的解决方案,以供有兴趣的人参考。


我能知道为什么需要使用远程Java应用程序吗,因为它使用的是localhost,这意味着我正在使用自己的本地计算机进行调试
Karen Goh,


0

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


-2

最简单,最快:在构建时将Eclipse设置为生成WAR文件。作为构建后的步骤,请将该WAR文件复制到您的tomcat webapps目录中。Tomcat将识别更改,并在无需部署的情况下刷新站点。请注意,这不是完美的。使用该Web应用程序的用户的体验可能不尽如人意,因为Tomcat在其“下方”重新启动Web应用程序;但这确实符合您的要求。


1
好吧...我想我没有说清楚我的意图。我确实对将应用程序部署给某些用户不感兴趣,但是我正尝试使用eclipse运行tomcat来满足我的日常开发需求,并缩短(make change)->(See Result)而不是(Make)的反馈周期。更改)->部署->(查看结果)
udit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.