Java Eclipse与IntelliJ热部署

Java Eclipse与IntelliJ热部署,java,eclipse,tomcat,intellij-idea,Java,Eclipse,Tomcat,Intellij Idea,我的应用程序配置:Tomcat8、Spring、SpringMVC、Hibernate 在Eclipse中,我创建了Tomcat服务器,并将我的应用程序添加到资源中。 JSP、JS、CSS和JAVA类热部署的工作原理就是这样 在IntelliJ中,我配置了Tomcat8服务器。在部署选项卡中,我添加了myapp:war。 我在“更新”操作中启用了,以更新类和资源,并且在帧停用时启用了:更新类和资源。 JSP、JS、CSS热交换就是这样工作的。Java类不是 我还检查了Settings>Build

我的应用程序配置:Tomcat8、Spring、SpringMVC、Hibernate

在Eclipse中,我创建了Tomcat服务器,并将我的应用程序添加到资源中。 JSP、JS、CSS和JAVA类热部署的工作原理就是这样

在IntelliJ中,我配置了Tomcat8服务器。在部署选项卡中,我添加了
myapp:war
。 我在“更新”操作中启用了
,以
更新类和资源
,并且在帧停用时启用了
:更新类和资源
。 JSP、JS、CSS热交换就是这样工作的。Java类不是

我还检查了
Settings>Build、exection、deployment>Compiler>makeprojectautomatically


另外,我知道我可以使用JRebel,但在Eclipse中,热部署没有JRebel也可以工作。为什么它在IntelliJ中不起作用?

您注意到IJ中“自动生成项目”旁边的注释了吗

仅在不运行/调试时工作


要重新部署,只需执行Ctrl+F9(make)或Ctrl+Shift+F9(make current file)。

在IJ中,您可以设置eclipse编译器而不是默认的javac编译器,但仍然需要手动进行。首先,该功能的名称不是“热部署”,而是热交换。它是JVM的特性,而不是IDE的特性。IDE只需自动化这个过程,并在有新版本的类可用时自动触发已更改类的热交换。热交换仅限于对现有方法的主体所做的更改

在IntelliJ中,转到设置->调试器->热交换并检查设置:

启用在后台重新加载类复选框,然后如果IDE要求您热交换类、静默热交换或从不热交换类,您可以选择行为

您必须手动编译。但是,如果应用程序是从“工件”部署的,则“自动生成项目”适用于正在运行的应用程序,即使它说的是相反的(设置->编译器)。但带来的不便是,自动编译会延迟触发,因此不会像人们预期的那样即时。手动编译就像在Eclipse中按CTRL+S一样简单,只需按CTRL+F9/CMD+F9即可生成项目(实际上是增量的),如果要编译单个文件,则只需按CTRL+SHIFT+F9/CMD+SHIFT+F9即可

我仍然建议改进这种体验,因为它走得很远,而且它与一个可消除重新部署的应用程序集成在一起。是的,我有偏见——我为ZeroTurnaround工作,我参与JRebel开发

更新:

最初的问题更多的是关于Tomcat/IntelliJ中web应用程序的自动重新部署 在运行配置中,您可以配置“更新”操作应执行的操作:

手动调用“更新”操作。CTRL+SHIFT+A/CMD+SHIFT+A,然后搜索“更新”:


因此,在IntelliJ中,重新部署是一个相当“一键式”的手动过程。

这与热部署无关。不管怎么做,如果IJ没有首先部署,它将无法部署任何东西。正如OP所提到的,他希望make会自动发生,但在运行时却不是这样。你们都错了:)实际上是JVM特性的代码替换称为热交换。热部署与重新部署应用程序相同,这与重新启动应用程序基本相同-从零开始释放会话状态并重新初始化应用程序。所以,是热交换。你们都错了:)。这个问题完全是关于热部署的。即使是公认的答案也没有涵盖这一点——事实上,热部署不仅仅是“重新启动”,首先需要重新编译,然后需要指示本地Web服务器注意已更改的字节码——之后可能会重新加载,也可能不会成功。请不要发布错误的答案,如果你甚至不知道问题是关于什么的,你可能会误导不知情的新来者——就像你现在所做的那样。这里的讨论更令人困惑!但是,我希望有一个类似于在Eclipse中发布的选项。发布意味着您无需重新启动应用程序即可将最近的更改加载到服务器上。Ctrl+F9在IJ中执行相同的操作。这个答案帮助我找到了我想要的。谢谢@Stijngeukensis如果应用程序是从“工件”部署的,那么“自动生成”适用于正在运行的应用程序,即使它在设置中表示相反。但带来的不便是,它有一个延迟,因此它并不像人们所期望的那样即时。手动编译就像在Eclipse中按Ctrl+S一样简单-只是可以重新映射的不同快捷方式。感谢@koppor的通知。新的URL是