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

我正在用 Tomcat 运行 Intellij Ultimate 并部署一场战争。所有内容都部署到 tomcat 的 webapp 目录中。

当我更改像 xhtml 文件这样的文件时,是否有一种方法可以让 tomcat 自动获取这种更改?从现在开始,我需要从 Intellij 复制这个文件,并将它复制到 tomcat web app 目录下它所在的目录下。我知道有些文件需要重新编译,但 xhtml 不在其中。

92472 次浏览

如果您使用 IntelliJIDEA 部署一场战争,这是不可能完成的。但是,如果部署 爆发了战争,则为 可以。在《创意》中:

  1. 打开 Tomcat Run/Debug 配置(运行 > 编辑配置)
  2. 进入“部署”选项卡
  3. 在“ Deploy at Server Startup”部分中,删除(如果存在)工件 my-webapp-name:war
  4. 单击添加图标,选择“工件”,然后选择 my-webapp-name:war exploded
  5. 单击 OK (在“选择要部署的工件”对话框中)
  6. 仍然在运行/调试配置窗口中,选择“服务器”选项卡
  7. 在该选项卡的中间,将“ On frame Deactivation”设置更改为“ Update Resources”或“ Update Class and Resources”
    • 更新资源: 将更新所有更改过的资源(即类以外的所有应用程序组件)。
    • 更新类和资源: 所有更改后的资源将被更新; 更改后的类将被重新编译。请注意,是否更新实际的类取决于 Web 服务器的功能。如果我没记错的话,Tomcat 将重新加载 html/xhtml 和 jsp 文件,但不会加载 Servlet 或 JSP 或 Servlet 使用的类。您需要修改 Tomcat 来使用动态类加载器。
  8. 您还可以将“ 关于“更新””操作设置为上面选择的操作。
    • 这决定了在运行窗口中点击 Update < img src = “ https://i.stack.imgur.com/ZQkPY.png”alt = “ Update icon”> icon (或 Ctrl + F10)时会发生什么。
    • “显示对话框”决定是否 IDEA 提示您每次点击更新图标
  9. 单击 OK。

现在,每当您进行更改时,当 IDEA 的帧被停用(即失去焦点)时,IDEA 将重新部署更改后的文件。它确实需要一两秒钟,您将在 IDEA 的下面的状态栏中看到它。很明显。你仍然需要刷新你的网页浏览器来获取新的文件(当然,如果页面有一个自动的 ajax 刷新,如提取)。

与 Tomcat 的一个很好的组合是将“ On frame disactivation”设置为“ Update Resources”,并将“ On‘ Update’操作设置为“重新部署”或“ Restart Server”。这允许静态页面通过帧停用快速更新,类通过“更新”操作更新。

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

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

  1. 打开您的 Tomcat Run/Debug 配置(Run > Edit Configuration)

enter image description here

  1. 单击添加图标,选择“工件”,然后选择 pizza_mvc:war exploded: enter image description here

  2. 修改“更新操作”和“关闭帧”: enter image description here

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

如果要更新类和资源,请在 调试模式中运行 雄猫。在这种模式下,情报更新类和资源没有问题(热交换)。

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

我找到了更好的方法。

日食中我们自动构建、编译 + 重载静态文件。实际上静态文件是直接从 Src/main/webapp中提供的。

情报中,不是直接从 Src/main/webapp提供服务,而是在 target 中创建一个文件夹,其中将包含 Src/main/webapp的副本以及其他相关上下文。.Web-inf/class/lib.

如果您将爆炸工件的输出放到 Src/main/webapp而不是目标,它将不会覆盖您的源文件,并且它将直接服务于您的 就不用打了-更新资源/更新资源和类

所以在 IntelliJ 中你需要做的是

  1. 将爆炸的工件输出目录修改为 src/main/webapp enter image description here
  2. 创建一个宏用于保存和重新编译/编译脏类(cmd + shift + f9) enter image description here enter image description here
  3. 编辑注册表和首选项以自动构建并在应用程序运行时构建(cmd + shift + a-Registry)。 enter image description here enter image description here

在这之后,如果你的作业改变了 IntelliJ,您将立即看到更改,而不需要访问 IntelliJ 和 Update 参考资料之外的静态文件,对于那些你有宏保存和编译的类(注意: 你也可以点击编译/重新编译: cmd + shift + F9/cmd + F9-如果你有多个打开的编辑器将看到你的脏 * 编辑器将是非脏的,并且改变(类)将被重新加载)

这只有在您部署爆炸的 war 文件夹、启用热重载并在调试模式下启动 tomcat 时才可能实现。

以下是实现这一目标的步骤。

  1. 打开您的 Tomcat Run/Debug 配置(Run > Edit Configuration)
  2. 进入“部署”选项卡 在“ Deploy at Server Startup”部分中,删除(如果存在) my-webapp-name: war 工件
  3. 点击添加图标,选择“工件”,然后选择 my-webapp-name: war  爆炸
  4. 单击 OK (在“选择要部署的工件”对话框中)
  5. 仍然在运行/调试配置窗口中,选择“服务器”选项卡
  6. 更改“关闭帧”和“关闭更新操作”设置为“更新类和资源”
  7. 申请并保存
  8. 通过单击“文件”然后“设置”或“按 CTRL + ALT + S”转到普通项目设置
  9. Goto“构建、执行、部署”
  10. 编译器
  11. 自动选择 Build project
  12. 拯救
  13. 在调试模式下启动 tomcat

如果您有多部分文件要立即查看/播放,请直接上传到 targetfile。* (只将写入位置更改为目标文件夹/static/)

String yourpath = C\\andSoForth
yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

您将能够立即查看您的文件,而不必重新启动 IDE