问题 使用IntelliJ在webapp运行配置中使用maven覆盖?


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

我的下一步是将我的项目结构导入IntelliJ。 IntelliJ看到一切都很好,并且能够编译所有内容。我先测试了maven clean,然后让IntelliJ完成其余的工作(重建项目)。

最后一步是让它在我的容器中运行。我之前为网络应用设置了运行配置(他们不使用战争叠加),他们工作得很好。在这种情况下,我像以前一样设置它并指向我的爆炸webapp工件。

一旦我运行tomcat,它就找不到我的webapp。我发现叠加层还没有合并到项目的目标目录中(通常就是在进行maven安装时)。然而,IntellJ在我的项目中创建了一个叠加目录,并在那里解压缩(overlay / super)WAR文件。

当我自己进行maven安装时,我得到它的工作,然后在IntelliJ中运行Tomcat。这是显而易见的,因为所有需要的文件现在都在我的目标目录中(例如web.xml):)。

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

它能做什么: - 它介于两者之间。它确实创建了一个目标目录,它确实从webapp项目中复制资源。它不会覆盖任何WAR依赖项,因此webapp目标目录不完整。

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


12253
2017-09-21 09:40


起源



答案:


我发现检查运行配置中的“运行maven目标”复选框,并设置mvn包确实可以使它工作。


10
2017-09-21 10:42



这会让我也“更新课程”吗?或者我是否需要重新部署才能看到每一个变化? - Abhimanyu
当您更新类时,它们将被加载到内存中并且它将起作用。但请注意,当您使用多个依赖项时,下次启动容器时,您需要确保容器(即tomcat)也在查看最新的依赖项源。我发现这很麻烦,我不得不mvn clean安装这些依赖项,以确保它们在我的本地repo中。这样mvn包的目标就是正确地选择它们。 - Stefan Hendriks
@StefanHendriks:谢谢你的提示。我有一个类似的问题,我的覆盖定义被IntelliJ忽略。似乎IntelliJ在使用自己的内部构建机制构建webapp时忽略了maven-war-plugin的一些配置。告诉它将war构建委托给maven本身意味着整个war-plugin配置都很荣幸。 - skaffman
@skaffman很高兴它对你有所帮助。 - Stefan Hendriks


答案:


我发现检查运行配置中的“运行maven目标”复选框,并设置mvn包确实可以使它工作。


10
2017-09-21 10:42



这会让我也“更新课程”吗?或者我是否需要重新部署才能看到每一个变化? - Abhimanyu
当您更新类时,它们将被加载到内存中并且它将起作用。但请注意,当您使用多个依赖项时,下次启动容器时,您需要确保容器(即tomcat)也在查看最新的依赖项源。我发现这很麻烦,我不得不mvn clean安装这些依赖项,以确保它们在我的本地repo中。这样mvn包的目标就是正确地选择它们。 - Stefan Hendriks
@StefanHendriks:谢谢你的提示。我有一个类似的问题,我的覆盖定义被IntelliJ忽略。似乎IntelliJ在使用自己的内部构建机制构建webapp时忽略了maven-war-plugin的一些配置。告诉它将war构建委托给maven本身意味着整个war-plugin配置都很荣幸。 - skaffman
@skaffman很高兴它对你有所帮助。 - Stefan Hendriks