7

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

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

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

4

2 回答 2

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 的启动时间稍长。这是我们愿意忍受的东西......现在

于 2013-06-02T07:35:48.620 回答
0

我认为热代码部署仅适用于爆炸的工件。在 IDEA 11 中,我重命名了分解后的目录,因为 maven artefacts 位于相同的位置并且名称相同。

于 2013-04-26T21:29:52.497 回答