150

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

当我更改像 xhtml 文件这样的文件时,tomcat 有没有办法自动获取该更改?截至目前,我需要从 Intellij 复制文件并将其复制到它位于 tomcat Web 应用程序目录中的目录。我知道有些文件需要重新编译,但 xhtmls 不是其中之一。

4

6 回答 6

302

如果您使用 IntelliJ 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 文件,但不会重新加载 Servlet 或 JSP 或 Servlet 使用的类。您需要修改 Tomcat 以为此使用动态类加载器。
  8. 您也可以将“ On 'update' ”操作设置为上面选择的操作。
    • 这决定了当您在运行窗口中点击更新更新图标图标(或Ctrl+ )时会发生什么。F10
    • “显示对话框”确定每次点击更新图标时 IDEA 是否都会提示您
  9. 单击确定。

现在,只要您进行更改,当 IDEA 的框架被停用(即失去焦点)时,IDEA 将重新部署更改的文件。它确实需要一两秒钟,您会在 IDEA 的下方状态栏中看到它。明显地。您仍然需要刷新您的网络浏览器,以便它获取新文件(当然,除非该页面具有自动刷新 ajax 之类的功能)。

与 Tomcat 的一个很好的组合是将“On frame deactivation”设置为“Update Resources”,并将“On 'update' action 设置为“Redeploy”或“Restart Server”。这允许通过 frame deactivation 快速更新静态页面,并且通过“更新”操作更新的类。

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

于 2013-10-26T16:35:42.803 回答
27

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

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

在此处输入图像描述

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

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

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

于 2015-09-20T12:15:16.830 回答
12

如果要更新类和资源,请在调试模式下运行Tomcat。在这种模式下, IntelliJ可以毫无问题地更新类和资源(热交换)。

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

于 2016-01-18T20:58:26.543 回答
3

我找到了更好的方法。

Eclipse中,我们自动构建、编译 + 重新加载静态文件。实际上静态文件是直接从src/main/webapp提供的。

IntelliJ中,不是直接从src/main/webapp提供服务,而是在 target 中创建了一个文件夹,您将在其中拥有src/main/webapp以及其他与上下文相关的 .. web-inf/classes /lib 的副本。

如果您将爆炸工件的输出而不是目标放置到src/main/webapp,它不会覆盖您的源文件,而是直接提供服务,您不必点击-更新资源/更新资源和类

所以你需要在 IntelliJ 中做的是

  1. 将分解后的工件输出目录修改为 src/main/webapp 在此处输入图像描述
  2. 制作一个宏来保存和重新编译/编译脏类(cmd+shift+f9) 在此处输入图像描述 在此处输入图像描述
  3. 编辑注册表和首选项以自动构建并在应用程序运行时构建(cmd+shift+a - 注册表)。 在此处输入图像描述 在此处输入图像描述

在此之后,如果您有从 IntelliJ 外部更改静态文件的作业,您将立即看到更改,而无需转到 IntelliJ 和 Update Resources,并且对于您拥有保存和编译的宏的类(注意:您也可以直接点击 Compile /重新编译:cmd + shift + F9 / cmd + F9 - 如果你有多个打开的编辑器会看到你的脏 * 编辑器将是非脏的,并且更改(类)将被重新加载)

于 2016-10-15T18:18:43.843 回答
0

这只有在您部署分解的战争文件夹、启用热重载并在调试模式下启动 tomcat 时才有可能。

这些是实现这一目标的步骤。

  1. 打开您的 Tomcat 运行/调试配置(运行 > 编辑配置)
  2. 转到“部署”选项卡 3.在“在服务器启动时部署”部分,删除(如果存在)工件 my-webapp-name:war
  3. 单击添加图标,选择“工件”,然后选择 my-webapp-name:war exploded
  4. 单击确定(在“选择要部署的工件”对话框中)
  5. 仍然在运行/调试配置窗口中,选择“服务器”选项卡
  6. 将“帧停用”和“更新操作”设置更改为“更新类和资源”
  7. 应用并保存
  8. 通过单击文件然后设置或按 CTRL + ALT + S 转到正常项目设置
  9. 转到“构建、执行、部署”
  10. 编译器
  11. 选择自动构建项目
  12. 节省
  13. 以调试模式启动tomcat
于 2019-12-05T17:56:03.587 回答
0

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

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

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

于 2020-02-28T03:30:42.640 回答