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

时间:2013-10-25 18:14:08

标签: tomcat intellij-idea war automatic-updates

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

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

6 个答案:

答案 0 :(得分:268)

如果使用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. 您还可以将“ On'update'”操作设置为上面选择的操作。
    • 确定在“运行”窗口中点击“更新Update icon”图标(或 Ctrl + F10 )时会发生什么。
    • “显示对话框”确定每次点击更新图标时IDEA是否会提示您
  9. 单击“确定”。
  10. 现在,只要您进行更改,IDEA将在IDEA的帧停用(即失去焦点)时重新部署更改的文件。确实需要一两秒钟,你会在IDEA的较低状态栏中看到它。明显。你仍然需要刷新你的网络浏览器,以便它获取新文件(当然,除非页面有像aetch一样的ajax自动刷新)。

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

    名为ZeroTurnaround的公司销售JRebel,这是一个动态的类加载器解决方案。他们也有five part series on the subject非常好。

答案 1 :(得分:17)

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

  1. 打开Tomcat运行/调试配置(运行>编辑配置)
  2. enter image description here

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

    2. 修改'更新操作'和'在帧停用': enter image description here

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

答案 2 :(得分:11)

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

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

答案 3 :(得分:1)

我找到了更好的方法。

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

IntelliJ 中,而不是直接从 src / main / webapp 投放,在目标中创建了一个文件夹,您将在其中获得的副本src / main / webapp 以及其他相关的上下文.. web-inf / classes / lib。

如果您将爆炸工件的输出替换为目标 src / main / webapp ,它将不会覆盖您的源文件,它将直接提供,您赢了&#39 ;必须点击 - 更新资源/更新资源和类

所以你需要在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
  4. 在此之后,如果您有从IntelliJ外部更改静态文件的作业,您将立即看到更改而无需转到IntelliJ和更新资源,对于您拥有该宏的类,可以保存,以及编译(注意:您也可以点击编译/重新编译:cmd + shift + F9 / cmd + F9 - 如果您有多个打开的编辑器将看到您的脏*编辑器将非脏,并且将重新加载更改(类)

答案 4 :(得分:0)

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

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

  1. 打开您的Tomcat运行/调试配置(运行>编辑配置)
  2. 转到“部署”标签 3.在“在服务器启动时部署”部分中,删除工件my-webapp-name:war
  3. (如果存在)
  4. 点击添加图标,选择“工件”,然后选择“我的网络应用名称:战争爆炸”
  5. 单击“确定”(在“选择要部署的工件”对话框上)
  6. 仍然在“运行/调试配置”窗口中,选择“服务器”标签
  7. 将“停用框架”和“更新操作时”设置更改为“更新类和资源”
  8. 应用并保存
  9. 通过依次单击“文件”和“设置”或按CTRL + ALT + S进入正常项目设置
  10. 转到“构建,执行,部署”
  11. 编译器
  12. 选择自动构建项目
  13. 保存
  14. 以调试模式启动tomcat

答案 5 :(得分:0)

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

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

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