IntelliJ和Tomcat …更改的文件不会被Tomcat自动识别

我使用Tomcat运行Intellij Ultimate并部署了一场战争。 一切正常部署tomcat的webapp目录。

当我像xhtml文件一样更改文件时,有没有办法让tomcat自动获取更改? 截至目前,我需要从intellij复制文件,并将其复制到它所在的目录下的tomcat webapp目录中。 我知道有些文件需要重新编译,但是xhtml不是其中之一。

如果您使用IntelliJ IDEA部署战争,则无法完成此操作。 但是,如果你部署了一场爆炸性的战争 ,可能是这样。 在IDEA中:

  1. 打开Tomcat运行/debuggingconfiguration( 运行>编辑configuration
  2. 转到“部署”选项卡
  3. 在“在服务器启动部署”部分,删除(如果存在)artifact my-webapp-name:war
  4. 点击添加图标,select“工件”,然后selectmy-webapp-name:war exploded
  5. 点击OK(在“Select Artifacts to Deploy”对话框中)
  6. 仍然在运行/debuggingconfiguration窗口中,select“服务器”选项卡
  7. 在该选项卡的中间,将“On frame Deactivation”设置更改为“更新资源”或“更新类和资源”
    • 更新资源:所有更改的资源(即所有类以外的应用程序组件)都将被更新。
    • 更新类和资源。 所有更改的资源将被更新; 改变的类将被重新编译。 请注意,实际的类是否会被更新取决于functionWeb服务器。 如果我记得,Tomcat将重新加载html / xhtml和jsp文件,但不是JSP或Servlet使用的Servlet或类。 您需要修改Tomcat以使用dynamic类加载器。
  8. 您也可以设置“开始更新”操作。
    • 这决定了什么时候你点击更新 更新图标 图标(或Ctrl + F10 )在运行窗口中。
    • “显示对话框”决定每次点击更新图标时IDEA是否提示您
  9. 点击OK。

现在,无论何时您进行更改,IDEA都会在IDEA框架停用(即失去焦点)时重新部署更改的文件。 这需要一两秒钟,您会在IDEA中的较低状态栏中看到它。 明显。 你仍然需要刷新你的网页浏览器,以便它获取新的文件(除非当然,如果页面有一个像抓取ajax自动刷新)。

与Tomcat的良好结合是将“closures帧停用”设置为“更新资源”,将“更新”操作设置为“重新部署”或“重新启动服务器”,允许静态页面通过帧停用快速更新;类通过“更新”操作更新。

一家名为ZeroTurnaround的公司销售JRebel ,这是一个dynamic的类加载器解决scheme。 他们也有关于这个主题的五部分很好的系列。

让我来描述一下使用屏幕截图的操作顺序:

  1. 打开Tomcat运行/debuggingconfiguration(运行>编辑configuration)

在这里输入图像描述

  1. 点击添加图标,select“神器”,然后selectpizza_mvc:war exploded在这里输入图像描述

  2. 修改“更新操作”和“关于帧重新激活”: 在这里输入图像描述

  3. 每次你想刷新你的资源时,按<Ctrl> + F10

如果你想更新类和资源。 在“debugging模式”下运行Tomcat。 InteliJ在这种模式下更新没有问题类和资源。

有同样的问题。 InteliJ没有更新我的项目,因为我以“运行模式”运行。 当我在debugging模式下运行并按下Ctrl + F10时 ,它会更新类和资源。

我find了一个更好的方法。

Eclipse中,我们自动构build,编译+重新加载静态文件。 其实静态文件直接从src / main / webapp提供

IntelliJ中,而不是直接从src / main / webapp提供 ,在目标文件夹中创build一个文件夹,其中包含src / main / webapp的副本以及其他相关的上下文.. web-inf / classes / lib。

如果你把代替目标的分解工件输出到src / main / webapp ,它不会覆盖你的源代码文件,并且它将直接服务,你不必打更新资源/更新资源和类

所以你需要在IntelliJ中做什么

  1. 将展开的工件输出目录修改为src / main / webapp 在这里输入图像描述
  2. 创build一个macros来保存并重新编译/编译脏类(cmd + shift + f9) 在这里输入图像描述 在这里输入图像描述
  3. 编辑registry和首选项来自动构build和构build应用程序运行(cmd + shift + a – registry)。 在这里输入图像描述 在这里输入图像描述

在这之后,如果你有改变IntelliJ以外的静态文件的工作, 你将会立即看到改变,而不用去IntelliJ和更新资源 ,以及你有这个macros的类保存并编译(注意:你也可以点击编译/重新编译:cmd + shift + F9 / cmd + F9 – 如果你有多个打开的编辑器会看到你的脏编辑器将是非脏的,并且更改(类)将被重新加载)