简答
正在运行的应用程序和服务器性能是相等的。但是,您通常希望使用run-war,因为它为您提供了交付战争文件的额外好处。如果您绝对需要让您的应用程序尽可能快地在本地运行(几乎不可能),您想使用run。
细节来了
让我们从什么是war文件以及创建它的目的开始:
战争。是打包 Web 应用程序的文件的扩展名
ZIP 格式的目录层次结构,是 Web Archive 的缩写。爪哇
Web 应用程序通常打包为 WAR 文件进行部署。
[Baeldung]
为什么将 java web 应用打包为 WAR?
因为 WAR 不仅是一个 zip 文件,而且(正确构建)强制执行 Java Web 应用程序规范。您可以在 any 容器上部署和运行 war 文件。结帐Wikipedia 以获得更多优势。
不同的目标,不同的结果
目标tomcat:run 和tomcat:run-war 都在嵌入式tomcat 服务器上启动您的应用程序。 tomcat:run-war 包含一个额外的 package 目标,用于将您的应用程序打包到 WAR 文件中。然后,嵌入式 tomcat 服务器将解压缩此 WAR 文件,以便能够运行应用程序。所以应用程序和服务器是相同的,但run-war 的结果不同,因为您获得了额外的 WAR 文件。
但是那个 WAR 文件有什么用呢?
首先,它没有任何缺点,只是构建时间增加了几秒钟。甚至热交换工具和功能也可以在两者之间使用 WAR 文件。
作为该目标的一部分创建 WAR 文件的主要原因是:
测试。 构建 WAR 文件意味着您的构建管道会经历 WAR 构建的所有步骤。由于您稍后将部署该 WAR 文件(提醒:其容器的 标准),您可以测试“构建”、“解包”和“部署”步骤是否正常工作。此外,如果没有,您可以检查文件的结构。
多个部署。
您可以在本地构建和运行应用程序,但您仍然可以将该 WAR 文件部署到您正在运行的多个容器中。在某些行业场景中,您需要确保您的 WAR 文件在不同的容器上运行,并且您可以使用该文件将其部署到任何地方。
CI 管道。
您可能不仅希望在本地应用应用程序,还希望将结果集成到您的持续集成中。也许您甚至会自动将本地构建部署到测试服务器,但更有可能的是,您在构建 WAR 的 CI 服务器上有一个自动化流程,在某些测试或登台系统上运行它,然后如果工作正常则转发 WAR .
存档。
您可能希望保留所有过去的构建 WAR 文件。可能是由于提到的其他原因之一,或者只是作为快速历史访问的备份。看看磁盘空间和内存使用如何随着应用程序的增长而变化也很有趣。归档 WAR 文件是一种调查方法。它们也可能被部署到 WAR 存档服务器。
结论
这两个目标都有其用途,但通常最好使用 run-war 目标,因为通过额外构建 WAR 文件可以获得好处。
免责声明
由于这个话题有点过时,我可能会添加以下内容:我只是在进行历史回顾。对于每个单独的用例,今天的用例和需求可能会有所不同。一些流程、maven-goals 和插件已经过时或出现了更好的实践。我只是在解释该目标在开发时的可能意图。