gpt4 book ai didi

scala - Intellij 多模块 maven 项目,其中一个子模块中的更新不会传播到 war

转载 作者:行者123 更新时间:2023-12-04 12:55:01 27 4
gpt4 key购买 nike

我正在使用 Intellij Idea 12 并有一个多模块 maven 项目。

为了简单起见,让我们假设我有:

  • 模块 A - 编译为 JAR
  • 模块 B - 取决于模块 A,也编译为 JAR
  • 模块 C - 取决于模块 B,但编译为 WAR

  • 我知道 Intellij 有它自己的 Maven 项目构建机制,所以当我第一次构建 WAR 并将其部署到 Tomcat 时,通常一切正常。当您需要在其中一个子模块中进行更改时,问题就开始了,例如模块 A 并重建 war (重建模块 C)

    Intellij 似乎使用了以前构建的旧模块 A jar,并忽略了我在制作/构建模块 C 时在模块 A 中所做的任何更改。

    我发现解决此问题的唯一方法是在模块 A 和 B 上运行 Maven 构建,并最初使用 Maven 构建 WAR 并将其部署为外部源。

    问题是我要部署 10 个 WAR,以及 20 多个编译成 jar 的子模块。当我只想查看我在影响一个 WAR 的子模块之一中所做的更改时,重建所有 war 是没有意义的。并且在支付 Intellij Ultimate 许可证的同时使用命令行在外部构建它们肯定没有意义(所以我可以使用应用程序服务器)

    现在将此行为与其他 IDE 进行比较
    1. Netbeans 通过 Maven 自然地与 maven 项目一起工作,所有构建/部署等都是使用 Maven 完成的,而不是通过某种内部机制。
    2. Eclipse 的内部机制也是如此,但所有 JAR 都会在 WAR 项目重建时更新。 (或其他一些有效的魔法)

    IDEA 是否有不同的工作方式,或者没有?

    最佳答案

    最终我找到了一个混合解决方案:
    Tomcat运行前要做的事情:

  • 全部清理
  • 构建、打包和注册(在存储库中)所有应该成为 JAR 的项目
  • 仅编译(不构建)WAR 项目
  • 使用 Intellij 构建 WAR Artifact (这是热插拔可用性所必需的)

  • 这就是我启动Tomcat的方式。

    详细资料:
  • 创建 3 个 Maven 运行配置

    1.1 清洁 所有项目Maven Clean for all Projects
    1.2 构建 所有带有 JAR Artifact 的项目。您需要使用 '-pl' maven 选项手动包含所有项目。或者,您可以在启动此配置之前运行“Maven clean”(查看屏幕截图)Build Jars
    1.3 编译所有带有 WAR Artifact 的项目 - 没有使用 Maven 打包 Compile WARs
  • 创建 Tomcat 配置以构建 War Artifact 并包含要在启动前运行的其他配置 enter image description here

  • 现在,当 Tomcat 运行时,可以热交换代码更改(如果 JVM 允许)或简单地重新启动服务器以包含所有新代码/更改。这样做的缺点是 Tomcat 的启动时间稍长。这是我们愿意忍受的东西......现在

    关于scala - Intellij 多模块 maven 项目,其中一个子模块中的更新不会传播到 war ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198604/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com