【问题标题】:IntelliJ and Tomcat....changed files are not automatically recognized by TomcatIntelliJ 和 Tomcat....更改的文件不会被 Tomcat 自动识别
【发布时间】:2013-11-04 23:33:01
【问题描述】:

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

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

【问题讨论】:

    标签: tomcat intellij-idea war automatic-updates


    【解决方案1】:

    如果您使用 IntelliJ IDEA 部署战争,则无法做到这一点。但是,如果您部署了爆发战争,它可能会发生。在 IDEA 中:

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

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

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

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

    【讨论】:

    • 我有错误:Error: Artifact 'my-webapp-name:war exploded' has invalid extension 如何解决?
    • 我也强烈推荐使用 DCEVM 来自动重新加载类。然后,您可以使用“更新类和资源”将任何更改应用于源代码,而无需重新部署应用程序。请参阅:blog.jetbrains.com/idea/2013/07/…。除了本教程解释的内容之外,还需要在 Tomcat 运行配置的 Setup/Connection - Debug 选项卡中设置 JAVA_HOME 以指向 DCEVM 的 JRE。
    • @yaroslavprokipchyn - 我不熟悉 JBoss 以及它可能有的任何“特殊”要求。但据我所知,它应该是一样的。对于 tomcat,IDEA 创建一个 Tomcat (context.xml) 配置,告诉 Tomcat 使用 target/{contextName} 目录作为 webapp 根目录。您可能需要查看帮助指南以获取任何 JBOs 特定信息。
    • 在第 7 步中,您将不会(至少在 Intellij 14 中)获得适当的下拉选项,除非您将所有工件加载为“爆炸”。
    • @ChiefTwoPencils - 第 5 步是在“选择要部署的工件”对话框(没有“应用”)上单击“确定”,而不是“运行/调试”配置窗口。我在第 5 步中添加了一个澄清声明。
    【解决方案2】:

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

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

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

    2. 修改“更新操作”和“帧停用”:

    3. 每当您想刷新资源时,请按<Ctrl> + F10

    【讨论】:

    • 感谢您提醒我检查“在‘更新’操作时”
    【解决方案3】:

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

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

    【讨论】:

    • Control-F10 为我解决了这个问题。谢谢!
    【解决方案4】:

    我找到了更好的方法。

    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 和更新资源,并且对于您拥有保存的宏的类,以及编译(注意:你也可以点击编译/重新编译:cmd + shift + F9 / cmd + F9 - 如果你有多个打开的编辑器会看到你的脏 * 编辑器将是非脏的,并且更改(类)将被重新加载)

    【讨论】:

    • 看来,如果你启用了注册表 compiler.automake.. 它只会通过点击保存来推送你的更改。
    【解决方案5】:

    这只有在你部署爆炸的war文件夹、启用热重载并在调试模式下启动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

    【讨论】:

      【解决方案6】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-28
        • 2016-02-14
        • 1970-01-01
        • 2016-08-16
        • 2015-04-15
        • 2014-06-16
        • 2020-04-05
        • 1970-01-01
        相关资源
        最近更新 更多