我想以集成的方式设置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
答案 0 :(得分:73)
有两种选择。
首先,Eclipse允许您执行此操作,只需略微更改配置(另请参阅此detailed post)
这仍然会反映代码更改,但不会重新启动服务器。
其次,我长期使用FileSync plugin:
WEB-INF/classes
(这与配置部署程序集几乎相同)这样对我来说非常合适。每次非结构性变化都会立即反映出来,无需重新部署。
<强>更新强>
您可以阅读有关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,包括:
你很轻松地获得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)
这可能不是最好的方式,但它对我有用。
我使用rsync命令将我的jsp项目中的更改同步到$ contextPath。
在Eclipse中为Tomcat使用远程调试,这将允许有限的热交换代码。如果更改静态字段或添加方法,则需要导出jar并重新启动上下文。
答案 10 :(得分:0)
我们可以使用以下选项吗? 双击eclipse中的Server - &gt;服务器位置 - &gt;使用tomcat安装。 它控制着tomcat的安装。 您不需要重新启动服务器以获取java类中的更改。
答案 11 :(得分:0)
我找到了一种最简单的方法:使用符号链接:我认为这是最快的方式,因为根本没有同步:tomcat目录和你的项目目录将始终是同一个目录。
Tomcat会定期检测更改并重新部署您的应用程序。
还有一种调试应用程序的方法,所以我谦虚地认为这是一个很好的解决方案。
我已经为所有感兴趣的人记录了我的解决方案here。
答案 12 :(得分:0)
万一,你匆忙:
瞧! :)
答案 13 :(得分:0)
我已经设法使用Spring Loaded JVM代理在我的开发环境中工作了。虽然我开发了Spring Web应用程序,但该项目的描述确实提到它是
可用于任何可能在JVM上运行的字节码
使用以下设置,我能够获得更改以自动发布到附加的Tomcat实例(通常的Eclipse WTP方法)。我正在使用基于Eclipse Mars.2(4.5.2)的Spring Tool Suite 3.7.3。
step == 10
-javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
文件之外的JAR,请按this issue's comments配置.class
VM参数。启动服务器并像往常一样将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;但这确实符合你的要求。