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

我正在使用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不同的方式或者没有?

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

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

这就是我启动Tomcat的方式.

详细资料:

>创建3个Maven运行配置

1.1清理所有项目
1.2使用JAR工件构建所有项目.您需要使用’-pl’maven选项手动包含所有项目.您可以选择在启动此配置之前运行“Maven clean”(查看截图)
1.3使用WAR工件编译所有项目 – 不使用Maven打包
>创建Tomcat配置以构建War工件,并包括在Launch之前运行的其他配置

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

转载注明原文:scala – Intellij多模块maven项目,其中一个子模块中的更新不会传播到war - 代码日志