【问题标题】:Maven tomcat plugin: tomcat7:run or tomcat7:run-war?Maven tomcat 插件:tomcat7:run 还是 tomcat7:run-war?
【发布时间】:2017-05-27 12:19:05
【问题描述】:

我在我的 Java Web 应用程序中使用 tomcat7-maven-plugin。现在我可以使用命令mvn clean tomcat7:run 运行我的网络服务器。最近我注意到https://tomcat.apache.org/maven-plugin-2.0/tomcat7-maven-plugin/plugin-info.html 中还有一个名为tomcat7:run-war 的命令,它说:

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

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

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

【问题讨论】:

    标签: java maven tomcat maven-plugin


    【解决方案1】:

    简答

    正在运行的应用程序和服务器性能是相等的。但是,您通常希望使用run-war,因为它为您提供了交付战争文件的额外好处。如果您绝对需要让您的应用程序尽可能快地在本地运行(几乎不可能),您想使用run


    细节来了

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

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

    为什么将 java web 应用打包为 WAR

    因为 WAR 不仅是一个 zip 文件,而且(正确构建)强制执行 Java Web 应用程序规范。您可以在 any 容器上部署和运行 war 文件。结帐Wikipedia 以获得更多优势。

    不同的目标,不同的结果

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

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

    首先,它没有任何缺点,只是构建时间增加了几秒钟。甚至热交换工具和功能也可以在两者之间使用 WAR 文件。 作为该目标的一部分创建 WAR 文件的主要原因是:

    • 测试
    • 多个部署
    • CI 管道
    • 存档

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

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

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

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


    结论

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

    免责声明

    由于这个话题有点过时,我可能会添加以下内容:我只是在进行历史回顾。对于每个单独的用例,今天的用例和需求可能会有所不同。一些流程、maven-goals 和插件已经过时或出现了更好的实践。我只是在解释该目标在开发时的可能意图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-25
      • 2014-09-19
      • 2013-08-02
      • 2012-08-11
      • 2014-08-07
      • 2013-11-23
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多