maven tomcat插件:tomcat7:run还是tomcat7:run-war?

mad*_*erd 7 java tomcat maven-plugin maven

tomcat7-maven-plugin在我的Java Web应用程序中使用.现在我可以使用命令运行我的Web服务器了mvn clean tomcat7:run.最近我注意到另一个命令tomcat7:run-war来自https://tomcat.apache.org/maven-plugin-2.0/tomcat7-maven-plugin/plugin-info.html,其中说:

tomcat7:run:使用嵌入式Tomcat服务器
将当前项目作为动态 Web应用程序运行.

tomcat7:run-war:使用嵌入式Tomcat服务器
将当前项目作为打包的 Web应用程序运行.

我知道该命令tomcat7:run-war会将我的应用程序打包到一个jar或一个war文件,然后在嵌入式服务器中运行它.我的问题是,在什么情况下我们应该使用这个命令,还tomcat7:run不够?或者运行打包应用程序可能会有更高的性能?我不确定.提前致谢.

Kek*_*nda 4

简短回答

正在运行的应用程序和服务器性能是相同的。但是,您通常想要使用它,run-war因为它为您提供了交付 war 文件的额外好处。run如果您绝对需要让您的应用程序尽可能快地在本地运行(几乎没有这种情况),那么您需要使用。


细节来了

让我们从什么是 war 文件以及创建它的目的开始:

战争。是以 ZIP 格式打包 Web 应用程序目录层次结构的文件的扩展名,是 Web Archive 的缩写。Java Web 应用程序通常打包为 WAR 文件进行部署。 [巴东]

为什么 Java Web 应用程序打包为WAR

因为 WAR 不仅是一个 zip 文件,而且(正确构建)强制执行 Java Web 应用程序规范。您可以在任何容器上部署并运行 war 文件。查看维基百科了解更多优势。

不同的目标,不同的结果

这两个目标tomcat:runtomcat:run-war在嵌入式 tomcat 服务器上启动您的应用程序。包括将应用程序打包到 WAR 文件中的tomcat:run-war额外目标。package然后,嵌入式 tomcat 服务器将解压该 WAR 文件,以便能够运行该应用程序。因此应用程序和服务器是相同的,但结果不同run-war,因为您获得了额外的 WAR 文件。

但是这个 WAR 文件有什么用呢?

首先,除了多了几秒钟的构建时间之外,它没有任何缺点。即使是热插拔工具和功能也可以使用中间的 WAR 文件。创建 WAR 文件作为该目标的一部分的主要原因是:

  • 测试
  • 多次部署
  • CI管道
  • 归档

测试。 构建 WAR 文件意味着您的构建管道经历了 WAR 构建的所有步骤。当您稍后将部署该 WAR 文件(提醒:它是容器的标准)时,您可以测试“构建”、“解包”和“部署”步骤是否正常工作。此外,如果不存在,您可以检查文件的结构。

多次部署。您可以在本地构建并运行该应用程序,但您仍然可以将该 WAR 文件部署到您正在运行的多个容器中。在某些行业场景中,您需要确保 WAR 文件在不同的容器上运行,并且可以使用该文件将其部署到任何地方。

CI 管道。您可能不仅希望在本地应用程序,还希望将结果集成到持续集成中。也许您甚至自动将本地构建部署到测试服务器,但更有可能的是,您在 CI 服务器上有一个自动化流程来构建 WAR,在某些测试或登台系统上运行它,然后在工作正常的情况下转发 WAR 。

归档。您可能想要保留所有过去构建的 WAR 文件。可能是出于提到的其他原因之一,或者只是作为快速历史访问的备份。了解磁盘空间和内存使用如何随着应用程序的增长而变化也很有趣。归档 WAR 文件是调查这一问题的一种方法。它们也可能被部署到 WAR 存档服务器。


结论

这两个目标都有其用途,但通常最好使用目标,run-war因为通过额外构建 WAR 文件可以获得好处。

免责声明

由于这个话题有点过时了,我可能会补充以下内容:我只是做一个历史性的回顾。如今,每个用例的用例和需求可能有所不同。一些流程、maven-goals 和插件已经过时,或者已经出现了更好的实践。我只是在解释该目标制定时背后可能的意图。