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

Tal*_* G. 7 scala jar war intellij-idea maven

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

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

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

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

Intellij似乎使用之前构建的旧模块A jar,并忽略我在创建/构建模块C时在模块A中所做的任何更改.

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

问题是我要部署10个WAR,以及编译为jar的20个子模块.当我只想看到我在一个影响一个WAR的子模块中所做的更改时,重建所有战争是没有意义的.在支付Intellij Ultimate许可证时,使用命令行在外部构建它们是没有意义的(因此我可以使用应用程序服务器)

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

是否有一种与IDEA不同的方式或者没有?

Tal*_* G. 1

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

  1. 全部清洁
  2. 构建、打包并注册(在存储库中)所有应成为 JAR 的项目
  3. 仅编译(不构建)WAR 项目
  4. 使用 Intellij 构建 WAR 工件(这是热插拔可用性所必需的)

这就是我启动 Tomcat 的方式。

详细资料:

  1. 创建 3 个 Maven 运行配置

    1.1清理所有项目适用于所有项目的 Maven Clean 1.2使用 JAR 工件构建所有项目。您需要使用“-pl”maven 选项手动包含所有项目。您可以选择在启动此配置之前运行“Maven clean”(查看屏幕截图)构建罐子 1.3使用 WAR 工件编译所有项目 -不使用 Maven 打包编译 WAR

  2. 创建 Tomcat 配置以构建 War 工件并包含在 Launch 之前运行的其他配置在此输入图像描述

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