Tomcat不会自动识别IntelliJ和Tomcat ....已更改的文件

Pet*_*ter 128 tomcat war intellij-idea automatic-updates

我正在使用Tomcat运行Intellij Ultimate并部署战争.一切都很好地部署到tomcat的webapp目录.

当我更改像xhtml文件这样的文件时,有没有办法让tomcat自动获取该更改?到目前为止,我需要从intellij复制文件并将其复制到tomcat webapp目录中的目录.我知道某些文件需要重新编译,但xhtml不是其中之一.

Jav*_*aru 278

如果使用IntelliJ IDEA部署战争,则无法执行此操作.但是,如果你部署爆炸战争可以了.在IDEA中:

  1. 打开Tomcat运行/调试配置(运行>编辑配置)
  2. 转到"部署"选项卡
  3. 在"在服务器启动时部署"部分中,删除(如果存在)工件 my-webapp-name:war
  4. 单击"添加"图标,选择"工件",然后选择 my-webapp-name:war exploded
  5. 单击"确定"(在"选择要部署的工件"对话框中)
  6. 仍在"运行/调试配置"窗口中,选择"服务器"选项卡
  7. 在该选项卡的中间,将"On frame Deactivation"设置更改为"Update resources"或"Update Classes and Resources"
    • 更新资源:更新所有已更改的资源(即,除类之外的所有应用程序组件).
    • 更新类和资源:将更新所有更改的资源; 更改的类将被重新编译.请注意,实际的类是否将更新取决于Web服务器的功能.如果我记得,Tomcat将重新加载html/xhtml和jsp文件,而不是JSP或Servlet使用的Servlet或类.您需要修改Tomcat以使用动态类加载器.
  8. 您还可以将" 打开'更新' "操作设置为上面选择的操作.
    • 这确定了您点击更新时会发生什么 更新图标"运行"窗口中的图标(或Ctrl+ F10).
    • "显示对话框"确定每次点击更新图标时IDEA是否会提示您
  9. 单击确定.

现在,只要您进行更改,IDEA将在IDEA的帧停用(即失去焦点)时重新部署更改的文件.确实需要一两秒钟,你会在IDEA的较低状态栏中看到它.明显.你仍然需要刷新你的网络浏览器,以便它获取新文件(当然,除非页面有像aetch一样的ajax自动刷新).

与Tomcat的良好结合是将"On frame deactivation"设置为"Update Resources",将"On'update"操作设置为"Redeploy"或"Restart Server".这样可以通过帧停用来快速更新静态页面,并且通过"更新"操作更新课程.

一家名为ZeroTurnaround的公司销售JRebel,这是一个动态的类加载器解决方案.他们还有关于这个主题五部分系列非常好.

  • 我还强烈建议使用DCEVM进行自动类重新加载.然后,您可以使用"更新类和资源"将任何更改应用于源代码,而无需重新部署应用程序.请参阅:http://blog.jetbrains.com/idea/2013/07/get-true-hot-swap-in-java-with-dcevm-and-intellij-idea/.除了本教程解释的内容之外,还需要在Tomcat Run Configuration的Setup/Connection - Debug选项卡中设置JAVA_HOME以指向DCEVM的JRE. (3认同)
  • 在步骤7中,您将不会(至少在Intellij 14中)获得适当的下拉选项,除非您将所有工件加载为"爆炸". (3认同)

Lor*_*ton 18

让我用截图描述一系列动作:

  1. 打开Tomcat运行/调试配置(运行>编辑配置)

在此输入图像描述

  1. 单击"添加"图标,选择"工件",然后选择pizza_mvc:war exploded: 在此输入图像描述

  2. 修改"在更新操作上"和"在帧上停用": 在此输入图像描述

  3. 每次要刷新资源时,请按 <Ctrl> + F10


Łuk*_*iak 11

如果要更新类和资源,请在调试模式下运行Tomcat.在这种模式下,IntelliJ更新类和资源没有问题(热插拔).

有同样的问题.IntelliJ没有更新我的项目,因为我以"运行模式"运行.当我在调试模式下运行并按Ctrl+时F10,它会更新类和资源.