我在Java应用程序中使用tomcat7-maven-plugin。现在,我可以使用命令mvn clean tomcat7:run运行我的web服务器。最近,我注意到还有一个名为tomcat7:run-war的https://tomcat.apache.org/maven-plugin-2.0/tomcat7-maven-plugin/plugin-info.html命令,它说:
tomcat7 7:run: 使用嵌入式Tomcat服务器,以动态 web应用程序的形式运行当前项目。 tomcat7:run-war: 使用嵌入式Tomcat服务器,以打包的 web应用程序的形式运行当前项目。
我知道命令tomcat7:run-war会将我的应用程序打包到一个jar或war文件中,然后在嵌入式服务器中运行它。我的问题是,在什么情况下我们应该使用这个命令,tomcat7:run还不够吗?或者运行打包应用程序会有更高的性能?我不确定。提前谢谢。
发布于 2019-09-24 12:18:01
短答案
运行中的应用程序和服务器性能是相等的。但是,您通常希望使用run-war,因为它为您提供了传递war文件的额外好处。如果您绝对需要让您的应用程序以尽可能快的速度在本地运行(几乎没有这种情况),您希望使用run。
来了细节
让我们先来看看war文件是什么以及它是为什么创建的:
战争。是以ZIP格式打包web应用程序目录层次结构的文件的扩展名,是Web的缩写。Java应用程序通常打包为WAR文件进行部署。[白龙]
为什么java web应用程序被打包为WAR
因为WAR不仅是一个zip文件,而且(正确构建)强制执行Java应用程序规范。您可以在任何容器上部署和运行war文件。查看维基百科以获得更多优势。
不同的目标,不同的结果
目标tomcat:run和tomcat:run-war都在嵌入式tomcat服务器上启动应用程序。tomcat:run-war包含一个额外的package目标,用于将应用程序打包到WAR文件中。然后,这个WAR文件将由嵌入式tomcat服务器解压缩,以便能够运行应用程序。因此,应用程序和服务器是相同的,但是对于run-war来说,结果是不同的,因为您得到了额外的WAR文件。
但是那个WAR文件有什么用?
首先,除了几秒钟的构建时间之外,它没有什么坏处。即使是热交换工具和特性之间的WAR文件也能工作。创建WAR文件作为该目标的一部分的主要原因是:
测试。构建一个WAR文件意味着您的构建管道经历了WAR构建的所有步骤。稍后您将部署这个WAR文件(提醒:这是容器的标准),您可以测试“build”、“unpackage”和“deploy”步骤是否正确工作。此外,如果不检查文件的结构,则可以检查它的结构。
多部署。您可以在本地构建和运行应用程序,但仍然可以将该WAR文件部署到已运行的多个容器中。在一些行业场景中,您需要确保WAR文件在不同的容器上运行,并且可以使用该文件将其部署到任何地方。
CI-pipeline.您可能不仅希望在本地应用程序,而且希望将结果集成到持续集成中。也许您甚至会自动地将本地构建部署到测试服务器上,但更有可能的是,您在CI服务器上有一个自动流程,用于构建WAR,在某些测试或暂存系统上运行WAR,并在正确的情况下转发WAR。
Archiving.你可能想要保存所有过去的构建战争文件。可能是因为提到的其他原因之一,或者只是作为快速历史访问的备份。了解磁盘空间和内存使用是如何随着应用程序的发展而发展的,这也是很有趣的。归档战争档案是调查的一种方法。它们也可能被部署到WAR存档服务器上。
结论
这两个目标都有它们的用法,但通常最好使用run-war目标,因为另外构建WAR文件会带来好处。
免责声明
由于这个话题有点过时,我想补充以下几点:我只是在做一个历史性的回顾。对于每个单独的用例,用例和需求今天可能有所不同。一些进程、maven目标和插件已经过时或出现了更好的实践。在制定这一目标时,我只是在解释其背后的可能意图。
https://stackoverflow.com/questions/44216775
复制相似问题