在IntelliJ中使用maven叠加层的web应用程序运行配置?

11

我正在开发一个基于magnolia的网站。我正在使用webapp原型创建一个新的Web应用程序。我能够使用命令行生成WAR文件并在我的容器(Tomcat)中部署它。然后我运行它,一切都正常。

我的下一步是将项目结构导入IntelliJ中。IntelliJ可以很好地看到所有内容,并能够编译它们。我已经通过先进行maven clean,然后让IntelliJ完成其他工作(重建项目)来测试过了。

最后一步是让它在我的容器中运行。我之前为Web应用程序设置过运行配置(它们不使用war覆盖),而且它们都可以正常工作。在这种情况下,我像以前一样设置了它,并指向我的已解压的webapp构件。

一旦我运行tomcat,它就找不到我的webapp。我发现覆盖层没有合并到项目的目标目录中(通常在只执行maven install时会这样)。但是,IntellJ在我的项目中创建了一个overlays目录,并在其中解压了(覆盖/超级)WAR文件。

当我自己执行maven install,然后在IntelliJ中运行Tomcat时,它就能正常工作。显然,因为现在我的目标目录中有各种需要的文件(例如web.xml)。

我想要的是: - IntelliJ知道当它运行Tomcat时,它应该像“mvn install”或“mvn package”一样准备目标目录。

它实际上做的是: - 它在两者之间做了一些事情。它确实创建了一个目标目录,并从webapp项目中复制资源。它没有覆盖任何WAR依赖项,因此webapp目标目录不完整。

有人有解决这个问题的技巧吗?

1个回答

10

我发现在运行配置中勾选“运行Maven目标”复选框,并设置mvn package确实可以使其正常工作。


这会让我能够“更新类”吗?还是说我必须重新部署才能看到每一个更改? - Abhi
1
当您更新类时,它们将被加载到内存中并正常工作。但请注意,当您使用多个依赖项时,下次启动容器时,您需要确保容器(即tomcat)也查看依赖项的最新源。我发现这相当麻烦,我必须mvn clean install这些依赖项,以确保它们在我的本地仓库中。这样mvn package目标就可以正确地获取它们。 - Stefan Hendriks
@StefanHendriks:感谢您的提示。我遇到了类似的问题,我的覆盖定义被IntelliJ忽略了。看起来当IntelliJ使用自己的内部构建机制构建Web应用程序时,它会忽略maven-war-plugin的某些配置。告诉它将war构建委托给maven本身意味着整个war-plugin配置都会受到尊重。 - skaffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接