我在Java Web应用程序中使用tomcat7-maven-plugin
。现在我可以使用命令mvn clean tomcat7:run
运行我的Web服务器。最近我注意到https://tomcat.apache.org/maven-plugin-2.0/tomcat7-maven-plugin/plugin-info.html还有一个名为tomcat7:run-war
的命令,其中包含:
tomcat7:运行:
使用嵌入式Tomcat服务器将当前项目作为动态 Web应用程序运行。tomcat7:运行战争:
使用嵌入式Tomcat服务器将当前项目作为打包的 Web应用程序运行。
我知道命令tomcat7:run-war
会将我的应用程序打包到jar
或war
文件,然后在嵌入式服务器中运行。我的问题是,在什么情况下我们应该使用这个命令,tomcat7:run
是不是足够了?或者运行打包应用程序可能会有更高的性能?我不确定。提前谢谢。
答案 0 :(得分:0)
简短答案
正在运行的应用程序和服务器性能相同。但是,您通常要使用run-war
,因为它为您提供了发送战争文件的额外好处。如果您绝对需要使您的应用程序尽可能快地在本地运行(几乎没有这种情况),则想使用run
。
让我们从一个战争文件及其创建目的开始:
战争。是打包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文件。然后,该WAR文件将由嵌入式tomcat服务器解压缩,以便能够运行该应用程序。因此,应用程序和服务器是一部分,但是run-war
的结果是不同的,因为您会获得额外的WAR文件。
但是该WAR文件有何用处?
首先,它没有任何缺点,只是增加了几秒钟的构建时间。甚至热插拔工具和功能也可以在两者之间使用WAR文件。 创建WAR文件作为该目标的一部分的主要原因是:
测试。构建WAR文件意味着您的构建管道经历了WAR构建的所有步骤。稍后您将部署该WAR文件(提醒:容器的 the 标准)时,您可以测试“ build”,“ unpackage”和“ deploy”步骤是否正常运行。此外,您可以检查文件的结构(如果没有)。
多个部署。 您可能在本地构建和运行该应用程序,但是您仍然可以将该WAR文件部署到已运行的多个容器中。在某些行业情况下,您需要确保WAR文件在不同的容器上运行,并且可以使用该文件将其部署到任何地方。
CI管道。 您可能不仅要本地化应用程序,还要将结果集成到您的持续集成中。也许您甚至可以自动将本地版本部署到测试服务器,但是更有可能的是,您在配置WAR的CI服务器上有一个自动化流程,可以在某些测试或登台系统上运行它,如果可以正常运行,则在以后转发WAR
归档。 您可能希望保留所有过去的WAR文件。可能是由于上述其他原因之一,还是作为快速历史访问的备份。观察磁盘空间和内存使用量如何随着不断增长的应用程序而变化也可能很有趣。存档WAR文件是一种调查方式。它们也可能部署到WAR存档服务器。
结论
两个目标都有其用途,但是通常更可取的是使用run-war
目标,因为通过额外构建WAR文件可以获得的好处。
免责声明
由于该主题有点过时,因此我可能添加以下内容:我只是在进行历史性回顾。对于每个单独的用例,用例和需求今天可能有所不同。一些流程,目标和插件已经过时,或者出现了更好的做法。我只是在解释该目标制定时的潜在意图。